2016-08-16 24 views
0

我想總結一下數據表中的一些數據,我試圖做的是總結找到的重複行的總數量。如果發現重複行,則在數據表中遞增列值

我的數據表看起來像這樣。

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

我想總結這些數據看起來像這樣。

|ForeName|SurName|Quantity| 
|Dave |Smith | 60000 | 
|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() 

不過從這裏到我不確定出發,有沒有人曾見過的情景來了,如同這一點,並能指出我在正確的方向。

+0

你想改變的數據表內容,或者只是在其報告? – Plutonix

+0

嗨Plutonix謝謝你的回覆。我只想報告它,我想也許我可以用摘要數據建立一個新的數據表,這是我的意圖,試圖找到任何重複,然後總結它們,但我不確定最好的方式來做這個。 –

回答

1

按名稱或ID對行進行分組;使用名稱/ ID作爲新匿名類型的標識符,和一個計數/總或數量屬性收集數量的Sum

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() 

對於「樂趣」它也算作源/組的數量行並按總數排序。

enter image description here

1

如果你不介意的輸出是匿名類型,而不是數據行,你可以使用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將僅僅意味着增加Group.CountSelect條款:

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 
相關問題