【问题标题】:What is the LINQ/Lambda equivalent to Select Count(*), SUM(someColumn) From SomeTable什么是 LINQ/Lambda 等效于 Select Count(*), SUM(someColumn) From SomeTable
【发布时间】:2014-09-29 00:04:09
【问题描述】:

我认为我不必按特定列分组来返回 LINQ 或 lambda 表达式中的 SUM 和 COUNT 的聚合。

是否有一种快速有效的方法可以在 LINQ 中或作为 Lambda 表达式重现以下 T-SQL 查询

SELECT COUNT(*), SUM(SomeIntegerColumn) From SomeTable

也许我错过了什么

【问题讨论】:

  • 是否可以将 Both 作为新对象?像新的 {SUM(col), Count(*)}

标签: c# linq lambda


【解决方案1】:

试试这个:

from x in SomeTable
group x by 1 into g
select new
{
     Count = g.Count(),
     Sum = g.Sum(x => x.SomeIntegerColumn)
}

诀窍是“虚拟”分组,它可以让您在一个查询中计算多项内容。

【讨论】:

  • 所以你还需要使用 group by?但是用布尔值填充它?
  • 这很聪明。 +1
  • @ShayanZafar,我不明白你所说的布尔值是什么意思......是的,你必须进行分组,因为 Linq 聚合运算符的工作方式。
  • 布尔我的意思是“将 x 按 1 分组”这是否意味着如果表或集合中存在行/对象,它将分组?
  • @ShayanZafar,由于分组键是恒定的,所以每个项目都相同,所以所有项目都在同一个组中。
【解决方案2】:

如果你真的想在没有组的情况下这样做,你可以:

var sumCount = 
    new { count = yourCollection.Count(), sum = yourCollection.Sum(i => i.SomeIntegerColumn) };

【讨论】:

  • 这种方法枚举集合两次。如果是内存中的小集合还不错,但如果是 DB 表就更糟了,因为会导致执行两次查询。
  • 好点。 Group By 可能并不漂亮,但它的存在是有原因的。
  • 这不需要进行两次查询吗?我认为上一个答案可以在一个查询中完成。不知道哪个效率更高。可以在这里讨论
猜你喜欢
  • 1970-01-01
  • 2010-12-22
  • 2022-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 2013-09-27
相关资源
最近更新 更多