1

与えられた

class Row
{
   public int CustomerId;
   public decimal Purchase;
}

顧客ごとの合計購入数で別のコレクションを取得する最も簡単な方法は何ですか? 基本的に、GroupBy と購入が追加されます。

rows.GroupBy(r => r.CustomerId);

コレクションはかなり小さいため、パフォーマンスは重要ではありません。

編集 Row クラスにいくつかのプロパティがあり、グループ化された結果を匿名ではなく特定のタイプにしたいとします。

class Row
{
   public int CustomerId;
   public decimal Purchase;
   public string SomeProp1;
   public double SomeProp2;
   public long SomeProp3;
}

class TotalsRow
{
   public int CustomerId;
   public decimal TotalPurchases;
   public string SomeProp1;
   public double SomeProp2;
   public long SomeProp3;
}

EDIT2 複数の行を統合しているため、前の編集が意味をなさないことに気付きました。私が実際に探しているのは、グループ内のすべての行に等しいプロパティを含めることです。Purchase を除く上記のすべてのプロパティがこの要件を満たしていると仮定すると、これが私が思いついた解決策です。

rows.GroupBy(r => r.CustomerId)
    .Select(g => new TotalsRow()
                {
                    CustomerId= g.Key, 
                    TotalPurchases = g.Sum(gr => gr.Purchase),
                    SomeProp1 = g.First().SomeProp1);
                    SomeProp2 = g.First().SomeProp2);
                    SomeProp3 = g.First().SomeProp3);
                }
       );
4

2 に答える 2

2

あなたは近くにいます。 プロパティと、そのグループ内の項目をループする列挙子をGroupBy含むコレクションを返します。Key

rows.GroupBy(r => r.CustomerId)
    .Select(g => new {
                    Customer = g.Key, 
                    TotalPurchases = g.Sum(gr => gr.Purchase)
                    }
           );
于 2013-09-09T13:11:57.517 に答える