2

在 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吗?我不确定如何转换为 LINQ ROW_NUMBER() OVER()union all

4

1 回答 1

1
  1. .Take(9)您可以使用“ ”和“ ”翻译行号.Skip(0).Take(1)
  2. UNION ALL映射到seqA.Concat(seqB)
  3. CTE 映射到仅包含查询的变量。像这样:

-

var q1 = SalesOrderLines.Where(...);
var q2 = q1.Concat(q1); //reused q1 multiple times for q2 like a CTE

所有这些在 SQL 端基本上都没有性能成本。

于 2012-05-13T09:46:24.063 回答