0

私はLINQを初めて使用します。ボードを検索しましたが、他のq/aは完全なサンプルを提供していません。IList<>厳密に型指定されたオブジェクトを LINQ でクエリする必要があり、次のことを行う必要があります。

  1. プロパティごとの合計
  2. プロパティでグループ化
  3. 合計したのと同じプロパティで注文
  4. 結果をトップ 2 に制限する

たとえば、私のデータが次のような場合:

 Id  |  Customer  |  CartTotal
-------------------------------
 1   |      a     |     100 
 2   |      a     |     50
 3   |      b     |     110
 4   |      b     |     128
 5   |      c     |     75
 6   |      c     |     30

私の結果は次のようになる必要があります。上位 2 つに限定し、顧客ごとにグループ化し、CartTotal の合計を計算しました。

Customer  |  CartTotal
----------------------
    b     |     238 
    a     |     150

これを達成する最善の方法は何ですか?

4

2 に答える 2

1
var query = carts.GroupBy(c => c.Customer)
                 .Select(g => new { Customer = g.Key, Total = g.Sum(p => p.CartTotal)})
                 .OrderByDescending(c => c.Total)
                 .Take(2);
于 2012-02-09T02:35:08.683 に答える
1

適切な拡張メソッドを連鎖させるだけです。最初に顧客GroupByごとにグループ化し、次に各グループごとに顧客とカートの合計にプロジェクトを作成しSelect、カートの合計の降順で並べ替えOrderByDescending、最後に上位 2 つを取得しTakeます。

var results = customerOrders.GroupBy(c=> c.Customer)
                            .Select(g=> new 
                             { 
                               Customer = g.Key, 
                               CartTotal = g.Sum(x=>x.CartTotal) 
                             })
                            .OrderByDescending(x=> x.CartTotal)
                            .Take(2);
于 2012-02-09T02:30:55.060 に答える