2016-08-16 1 views
0

データテーブル内のデータを集計しようとしていますが、重複する行の合計を合計することを試みています。重複する行が見つかった場合、データテーブルの列の値を増やす

私のデータテーブルは次のようになっています。

|ForeName|SurName|Quantity| 
|Dave |Smith | 10000 | 
|Dave |Smith | 20000 | 
|Dave |Smith | 30000 | 
|John |Peacock| 10000 | 

このデータをこのように要約したいと思います。私は、データテーブル内の重複

Dim duplicates = From rows In dt.AsEnumerable().GroupBy(Function(r) New With {Key .a = r("ForeName"), Key .b = r("SurName")}).Where(Function(gr) gr.Count() > 1).ToList() 

を探しています現時点では

|ForeName|SurName|Quantity| 
|Dave |Smith | 60000 | 
|John |Peacock| 10000 | 

しかし、ここから進んでする、私はわからないだが、誰もが今までこれと私を指すことができるようなシナリオに出くわしました正しい方向に。

+0

あなたはデータテーブルの内容を変更したり、それを報告したいされていますか? – Plutonix

+0

Plutonixさんからの返信ありがとうございました。私はちょうどそれについて報告したいと思っていました。サマリーデータを使って新しいデータテーブルを作ることができるかもしれないと思っていたのですが、重複を見つけて合計を集計しようと考えていましたが、これを行う。 –

答えて

1

名前またはIDで行をグループ化します。それはまた、ソース/グループの数をカウントし、「楽しさ」について

Dim duplicates = myDT.AsEnumerable(). 
       GroupBy(Function(r) New With {Key .Item = r.Field(Of String)("Name")}). 
       Select(Function(g) New With {Key .Name = g.Key.Item, 
               Key .Count = g.Count, 
          Key .Total = g.Sum(Function(s) s.Field(Of Int32)("Quantity"))}). 
             OrderByDescending(Function(j) j.Total). 
             ToList() 

:名前/新しいアノンのタイプ識別子としてID、および数量のSumを収集するためのカウント/総または数量プロパティを使用しますそれらを合計で注文します。

enter image description here

1

あなたは出力が匿名型の代わりでDataRowであることを気にしない場合は、次のようにLINQクエリを使用することができます:あなたは答えを使用することができ

Dim summary = 
    From r In dt.AsEnumerable() 
    Group By ForeName = r.Field(Of String)("ForeName"), SurName = r.Field(Of String)("SurName") Into Group 
    Select ForeName, SurName, Quantity = Group.Sum(Function(x) x.Field(Of Integer)("Quantity")) 
 
ForeName | SurName | Quantity 
---------+---------+--------- 
Dave  | Smith | 60000 
John  | Peacock | 10000 

this questionを使用して、必要に応じてDataTableに変換し直します。 Plutonix's answerに単にSelect句にGroup.Countを追加することを意味するであろうように、カウント数の追加

Dim summary = 
    From r In dt.AsEnumerable() 
    Group By ForeName = r.Field(Of String)("ForeName"), SurName = r.Field(Of String)("SurName") Into Group 
    Select ForeName, SurName, Group.Count, Quantity = Group.Sum(Function(x) x.Field(Of Integer)("Quantity")) 
 
ForeName | SurName | Count | Quantity 
---------+---------+-------+--------- 
Dave  | Smith |  3 | 60000 
John  | Peacock |  1 | 10000 
関連する問題