我正在寻找与此查询等效的Linq-to-SQL代码:
SELECT
[cnt]=COUNT(*),
[colB]=SUM(colB),
[colC]=SUM(colC),
[colD]=SUM(colD)
FROM myTable
这是无group by的聚合查询。除了发出四个单独的查询(一个Count和三个Sum),我似乎找不到任何方法来完成此操作。有什么想法吗?
我正在寻找与此查询等效的Linq-to-SQL代码:
SELECT
[cnt]=COUNT(*),
[colB]=SUM(colB),
[colC]=SUM(colC),
[colD]=SUM(colD)
FROM myTable
这是无group by的聚合查询。除了发出四个单独的查询(一个Count和三个Sum),我似乎找不到任何方法来完成此操作。有什么想法吗?
我找到的是似乎你仍需要使用group by...但是你可以只使用常数:
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]
您可以使用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)
});
group ord by 1 into og
上出现了错误。它不喜欢那个1。 - user2233219