Linq to SQL:如何在没有分组的情况下进行聚合?
Posted
技术标签:
【中文标题】Linq to SQL:如何在没有分组的情况下进行聚合?【英文标题】:Linq to SQL: how to aggregate without a group by? 【发布时间】:2009-10-20 20:42:12 【问题描述】:我正在搜索与此查询等效的 Linq-to-SQL:
SELECT
[cnt]=COUNT(*),
[colB]=SUM(colB),
[colC]=SUM(colC),
[colD]=SUM(colD)
FROM myTable
这是没有分组的聚合。除了发出四个单独的查询(一个计数和三个总和)之外,我似乎找不到任何方法来做到这一点。有什么想法吗?
【问题讨论】:
【参考方案1】:这就是我发现的似乎你仍然需要通过...进行分组...可以使用常量:
var orderTotals =
from ord in dc.Orders
group ord by 1 into og
select new
prop1 = og.Sum(item=> item.Col1),
prop2 = og.Sum(item => item.Col2),
prop3 = og.Count(item => item.Col3)
;
这会生成以下 SQL,虽然不是最佳的,但可以:
SELECT SUM([Col1]) as [prop1], SUM([Col2]) as [prop2], COUNT(*) AS [prop3]
FROM (
SELECT 1 AS [value], [t0].[Col1], [t0].[Col2], [t0].[Col3]
FROM [table] AS [t0]
) AS [t1]
GROUP BY [t1].[value]
【讨论】:
【参考方案2】:您可以使用 Lambda 表达式执行相同的查询,如下所示:
var orderTotals = db.Orders
.GroupBy( i => 1)
.Select( g => new
cnt = g.Count(),
ScolB = g.Sum(item => item.ColB),
ScolC = g.Sum(item => item.ColC)
);
【讨论】:
以上是关于Linq to SQL:如何在没有分组的情况下进行聚合?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 Linq to SQL 的情况下在 Windows Phone 中使用 SQL Server Compact
如何通过 LINQ to Sql 结果上的数据对分组进行 lambda?