2

LINQ でこれを行うことは可能ですか: フィールド (LineTotal) でグループ化し、上位 9 グループのみを返し、10 番目のグループで他のすべてのグループの合計を返しますか?

SQL サーバーでは、これは次のように行うことができます。

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 に変換できますか? 方法がわからず、LINQROW_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 に答える