2011-10-21 8 views
5

ひどいタイトルのためにお詫び申し上げます。LINQデータを2回グループ化する

私がどのように見えるオブジェクトを持っている:

CustAcct cust = new CustAcct(); 
cust.Name = "John Doe"; 
cust.Account = "ABC123"; 
cust.OrderTotal = 123.43 
cust.OrderQty = 4; 
cust.TransDate = "12/26/2010 13:00" 

これは本当にショッピングカート/お客様のものを扱っていないが、アイデアがあるので、次の部分を批判し、あまりにも多くの時間を費やすしないでください同じ、私はみんながよく知っているものを使いたいと思っていました。

アカウントは複数の顧客を持つことができ、顧客は複数のアカウントを持つことができます。

だから、あなたが持っている:私がやりたい何

List<CustAcct> custList = new List<CustAcct>(); 
custList.Add("John Doe", "ABC123", 123.43, 4, "12/26/2010 13:00"); 
custList.Add("John Doe", "ABC123", 32.12, 2, "12/27/2010 10:00"); 
custList.Add("John Doe", "ABC321", 43.34, 1, "12/28/2010 15:00"); 
custList.Add("John Doe", "ABC321", 54.60, 3, "12/28/2010 16:00"); 
custList.Add("Jane Zoe", "ABC123", 46.45, 2, "12/28/2010 17:00"); 
custList.Add("Jane Zoe", "ABC123", 32.65, 1, "12/29/2010 12:00"); 
custList.Add("Jane Zoe", "ABC321", 67.65, 3, "12/29/2010 23:00"); 
custList.Add("Jane Zoe", "ABC321", 75.34, 4, "12/30/2010 08:00"); 

は私の出力は次のようになりますので、それぞれのアカウントとお客様のために、すべてのたOrderTotalとOrderQtyの合計を取得することです:

Account Customer OrderTotal OrderQty 
ABC123  John Doe 155.55   6 
ABC321  John Doe  97.94   4 
ABC123  Jane Zoe  79.10   3 
ABC321  Jane Zoe 142.99   7 

私は私のLINQ to Objectsの本と101のLINQのサンプルを読んできたので、これをどうやって取得するのか分かりません。ありがとう。

+0

メソッド構文またはクエリ構文を使用していますか? –

+0

私はクエリの構文を使用しています。 CustListのcから... – Stephen

+0

アカウント/顧客のコンボをグループ化しますか?または、顧客別にグループ化し、次にアカウント別にグループ化しますか?微妙な違いはありますが、私の答えに影響します... –

答えて

9

あなたはすることができます。このようなグループと合計:

from ca in custList 
group ca by new { ca.Name, ca.Account } into g 
select new { 
    g.Key.Account, 
    g.Key.Name, 
    OrderTotal = g.Sum(o => o.OrderTotal), 
    OrderQty = g.Sum(o => o.OrderQty) 
}; 

See it in action

+0

ありがとうございます。それは完璧に働いた。 – Stephen