DataTable列の2つの列でグループ化

DataTable dtのRate列の合計を求める次のコードでは、

dt.Compute("Sum(Convert(Rate, 'System.Int32'))");

これは、SQLインのようなgroup by節を割り当てることで、同じdt Foの別の列の値に基づいてSumを得ることができます:

----------------------------
Rate | Group  |type
----------------------------
100  | A      | 1
120  | B      | 2
70   | A      | 1
50   | A      | 2
----------------------------

私はただ欲しいだけです。

Sum A=170(type-1) SUMA=50(type-2) an Sum B=120(type-2)

参考:以前の質問では、単一列の場合 DataTable列でのグループ化

2
@sll:いいえ、.NET3.5
追加された 著者 Nithesh,
@GertArnold:2つの条件をチェックする必要がありますグループとタイプ
追加された 著者 Nithesh,
なぜ、 var sum1 = dt.Compute( "Convert(Rate、 'System.Int32'))"、 "type = 1")があなたのために正しくないのか説明できますか?
追加された 著者 Gert Arnold,
だから "AND"を使ってください。 ( msdn.microsoft.com/en-us/library /…
追加された 著者 Gert Arnold,
.NET 4を使用できますか?
追加された 著者 sll,

1 答え

匿名タイプでグループ化することができます:

var result = from r in dt.AsEnumerable()
             group r by new { Group = r["Group"], Type = r["Type"] } into g
             select new { Group = g.Key.Group, 
                          Type = g.Key.Type, 
                          Sum = g.Sum(x => Convert.ToInt32(x["Rate"])) };

foreach (var r in result)
{
    Console.WriteLine("Group {0}, Type {1}, Sum {2}", r.Group, r.Type, r.Sum);
}
1
追加された