c# - Linq 获得前 9 组加上所有其他组的总和作为第 10 组

标签 c# sql-server linq linq-to-sql

在 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。

最佳答案

  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 方面基本上没有性能成本。

关于c# - Linq 获得前 9 组加上所有其他组的总和作为第 10 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10570491/

相关文章:

c# - 如何在 PowerShell 上获取 JSON 输出中的特定值?

c# - .net 应用程序中的 jQuery 日历

c# - 使用 C# 的 VSTO Outlook ItemSend

php - 需要在 linux(centos) 中托管 php-sqlsrv 应用程序的解决方案

sql-server - 使用多线程时在数据库中插入行?

c# - LINQ to SQL 数据库行未更新

c# - 使用 LINQ 将多个值绑定(bind)到 DropDownList?

c# - 在 Entity Framework 6中调用标量值函数

c# - 对类型 'Assembly' 的引用声称它在 'System.Runtime' 中定义,但找不到

sql-server - SQL Server 不向特定电子邮件地址发送电子邮件