2012-12-21 64 views
7

私はデータテーブルから集計値を取得しようとしています。しかし、どのように把握することはできません。 c#でいくつかの例を見たが、それらをvb.netに翻訳できなかった。私はループにしたいし、手動で値を組み合わせていないvb.netのlinqでDatatableグループ

Month, sales, leads, gross 
1   5  15  1000 
2   3   3   500 

私は結果を得るために必要なデータテーブルに

Month, campaign, sales, leads, gross 
1   1    5   10  1000 
1   2    0   5   0 
2   1    2   0   300 
2   2    1   3   200 

を持っています。助けてください

答えて

9

あなたはGroup by Monthしたいですか?あなたはグループを合計するSumを使用することができます。

Dim query = From row In dt 
     Group row By Month = row.Field(Of Int32)("Month") Into MonthGroup = Group 
     Select New With { 
      Key Month, 
      .Sales = MonthGroup.Sum(Function(r) r.Field(Of Int32)("Sales")), 
      .Leads = MonthGroup.Sum(Function(r) r.Field(Of Int32)("Leads")), 
      .Gross = MonthGroup.Sum(Function(r) r.Field(Of Int32)("Gross")) 
     } 

For Each x In query 
    Console.WriteLine("Month:{0} {1} {2} {3}", x.Month, x.Sales, x.Leads, x.Gross) 
Next 

これは、LINQのはquery-とメソッドの構文の混合物です。

+0

ありがとうございます。スニペットでキャスト例外が発生していました。しかし、 "Of Int32"から "Decimal"に変更されると、すべてが魅力的になりました。 – Nick

+0

ありがとうございました、私は年齢を問わず同様の問題に取り組んできました – majjam