GroupBy:シーケンスの要素をグループ化する
VB
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dt As New DataTable
With dt
.Columns.Add("OrderNo", GetType(Integer)) '注文番号
.Columns.Add("ProductCode", GetType(String)) '商品コード
.Rows.Add(1, "A001")
.Rows.Add(2, "A002")
.Rows.Add(3, "A003")
.Rows.Add(4, "A003")
.Rows.Add(5, "A005")
End With
'ProductCodeでグループ化する
For Each item In dt.AsEnumerable.GroupBy(Function(dr) dr("ProductCode"))
Debug.WriteLine(item.Key)
Next
'出力結果----
'A001
'A002
'A003
'A005
End Sub
DistinctBy:シーケンスの重複を除外する
VB
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dt As New DataTable
With dt
.Columns.Add("OrderNo", GetType(Integer)) '注文番号
.Columns.Add("ProductCode", GetType(String)) '商品コード
.Rows.Add(1, "A001")
.Rows.Add(2, "A002")
.Rows.Add(3, "A002")
.Rows.Add(4, "A003")
End With
'重複を除外したコードのリストを取得する
Dim list = dt.AsEnumerable.DistinctBy(Function(dr) dr("ProductCode")).
Select(Function(dr) dr("ProductCode")).
ToList
'出力結果----
'A001
'A002
'A003
End Sub
Join:2つのシーケンスを指定したキーで結合する
VB
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dt1 As New DataTable
With dt1
.Columns.Add("OrderNo", GetType(Integer)) '注文番号
.Columns.Add("ProductCode", GetType(String)) '商品コード
.Rows.Add(1, "A001")
.Rows.Add(2, "A002")
.Rows.Add(3, "A003")
End With
Dim dt2 As New DataTable
With dt2
.Columns.Add("ProductCode", GetType(String)) '商品コード
.Columns.Add("ProductName", GetType(String)) '商品名
.Rows.Add("A001", "パソコン")
.Rows.Add("A002", "冷蔵庫")
.Rows.Add("A003", "洗濯機")
End With
'ProductCodeをキーとしてdt1, dt2を結合した結果をlistに格納する
Dim list = dt1.AsEnumerable.Join(dt2.AsEnumerable,
Function(order) order.Field(Of String)("ProductCode"),
Function(product) product.Field(Of String)("ProductCode"),
Function(order, product) New With {
.OrderNo = order.Field(Of Integer)("OrderNo"),
.ProductName = product.Field(Of String)("ProductName")
}).ToList
'出力結果----
'OrderNo=1, ProductName="パソコン"
'OrderNo=2, ProductName="冷蔵庫"
'OrderNo=3, ProductName="洗濯機"
End Sub
コメント