Try   HackMD

[VB] LINQ - Group By

原始DataTable

Area Lot Quantity
F1 A 3
F2 B 5
F1 B 2
F1 A 7
F2 B 3

結果DataTable

相同Area和Lot的資料列合併,合併的Quantity加總,最後以Quantity排序。

Area Lot Quantity
F1 B 2
F2 B 8
F1 A 10

程式

'LINQ查詢
Dim query = From dr In originTable
            Group dr By g = New With {
                                Key .Area = dr("Area"),
                                Key .Lot = dr("Lot")
                            } Into Group
            Select dt = New With {
                            .Area = g.Area,
                            .Lot = g.Lot,
                            .Quantity = g.Sum(Function(x) x("Quantity"))
            }
            Order By dt.Quantity

'建立一個和原始table有同樣欄位的結果table
Dim resultTable As DataTable = New DataTable
resultTable = originTable.Clone()

'將LINQ查詢資料加到結果table
For Each dr In query
    Dim row As DataRow = resultTable.NewRow()
    row("Area") = dr.Area
    row("Lot") = dr.Lot
    row("Quantity") = dr.Quantity
    resultTable.Rows.Add(row)
Next