在 LINQ 中是否可以这样做:按字段分组 (LineTotal),仅返回前 9 组,然后在第 10 组中返回所有其他组的总和?
在 SQL Server 中,这可以像这样完成:
with TopGroups as
(
select sum(sol.LineTotal) as ProductGroupSales, p.ProductGroupId,
ROW_NUMBER() OVER(ORDER BY sum(sol.LineTotal) DESC) as Num
from SalesOrderLines sol left join Products p on p.Id = sol.ProductId
group by p.ProductGroupId
)
select ProductGroupSales from TopGroups where Num < 10
union all
select sum(ProductGroupSales) from TopGroups where Num >= 10
这可以翻译成 LINQ 吗?我不确定 ROW_NUMBER() OVER()
和 union all
如何转换为 LINQ。
最佳答案
- 您可以使用“
.Take(9)
”和“.Skip(0).Take(1)
”翻译行号。 UNION ALL
映射到seqA.Concat(seqB)
- CTE 仅映射到一个包含查询的变量。像这样:
-
var q1 = SalesOrderLines.Where(...);
var q2 = q1.Concat(q1); //reused q1 multiple times for q2 like a CTE
所有这些在 SQL 方面基本上没有性能成本。
关于c# - Linq 获得前 9 组加上所有其他组的总和作为第 10 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10570491/