2012-05-13 9 views
2

これはLINQで可能ですか?フィールド(LineTotal)でグループ化し、上位9個のグループのみを返し、次に10番目のグループで合計他のすべてのグループの? SQL ServerでLinqは10番目のグループとして上位9個のグループと他のすべてのグループの合計を取得します

これがそうのように行うことができます。

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に変換されるのか分かりません。

+0

上記のSQLステートメントは、この質問の答えに触発されました。http://stackoverflow.com/a/2601130/325727 –

答えて

1
  1. ".Take(9)"と ".Skip(0).Take(1)"を使用して行番号を変換できます。
  2. UNION ALLseqA.Concat(seqB)
  3. にマップします。CTEはクエリを保持する変数にマップします。これらのすべては基本的にSQL側の無いパフォーマンスコストで来る

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

    から

:そうのように。

関連する問題