【问题标题】:Translating WITH ROLLUP SQL statement to LINQ将 WITH ROLLUP SQL 语句转换为 LINQ
【发布时间】:2017-02-03 17:04:00
【问题描述】:

我需要帮助将语句从 LINQ 转换为 SQL

SQL

SELECT MONTH(ind_receita.lad_ins_date) as 'Month', SUM(ind_receita.valor) as Monthly_Value
FROM ind_receita
WHERE YEAR(ind_receita.lad_ins_date) = 2014
GROUP BY MONTH(ind_receita.lad_ins_date)
WITH ROLLUP

我知道如何在 LINQ 中执行所有语句,但我对 WITH ROLLUP 有一些疑问

LINQ

var query = (from p in _repositorio.GetReceitas()
             where p.DataHoraCriacaoRegistro.Year == 2014
             group p by new { p.DataHoraCriacaoRegistro.Month } into grp
             select new ReceitaPorGrupoProduto
             {
                 // Column with the alias 'Monthly_Value'
                 ValorReceita = grp.Sum(p => p.Valor)

                 // Column with the alias 'Month'
                 DataHora = grp.Key.Month
             }).ToList();

但是如何将WITH ROLLUP 放入我的LINQ 中?

汇总只会给我一个累加器,所以,如果我们可以在不为 LINQ 生成 ROLLUP 语句的情况下做到这一点,那就没问题了。

【问题讨论】:

  • @paqogomez 我读了这个帖子,但解决方案是在 2009 年给出的,也许可以做一个新的解决方案。无需构造新的类或方法。
  • 您使用的是什么版本的 .NET?
  • 为什么要这样做?我的意思是当你遇到 LINQ 限制时为什么不使用原始 SQL?
  • 我正在使用 NHibernate,所以为了完成您的建议,我需要创建一个可以处理原始 SQL 的新通用方法还是没有必要?

标签: c# sql linq .net-4.5


【解决方案1】:

这里提供了非常有趣的解决方案

https://blogs.msdn.microsoft.com/mitsu/2007/12/21/playing-with-linq-grouping-groupbymany/

它描述了如何通过几个属性来执行 groupbby。即:

var result = customers.GroupByMany(c => c.Country, c => c.City);

因此,您将获得可以简单地转换为平面列表的层次结构。我希望您可以将其用于您的案例。

【讨论】:

    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多