Group Join 句 (Visual Basic)
更新 : 2007 年 11 月
2 つのコレクションを、単一の階層コレクションに結合します。結合操作は、一致するキーに基づいて実行されます。
Group Join element [As type] In collection _
On key1 Equals key2 [ And key3 Equals key4 [... ] ] _
Into expressionList
指定項目
element
必ず指定します。結合するコレクションのコントロール変数です。type
省略可能です。element の型。type の指定がない場合、element の型は collection から推論されます。collection
必ず指定します。Group Join 演算子の左側にあるコレクションと結合するコレクション。Group Join 句は、Join 句または別の Group Join 句の中に入れ子にできます。key1Equalskey2
必ず指定します。結合するコレクションのキーを識別します。Equals 演算子を使用して、結合するコレクションのキーを比較する必要があります。複数のキーを識別する And 演算子を使用して、結合条件を組み合わせることができます。key1 パラメータは、Join 演算子の左側のコレクションのキーでなければなりません。key2 パラメータは、Join 演算子の右側のコレクションのキーでなければなりません。結合条件で使用されるキーは、コレクションの複数の項目を含む式を使用できます。ただし、それぞれのキー式に格納できるのは、該当するコレクションの項目だけです。
expressionList
必ず指定します。コレクションの要素グループの集計方法を識別する 1 つ以上の式。グループ化された結果のメンバ名を識別するには、Group キーワード (<alias> = Group) を使用します。グループに適用する集計関数を記述することもできます。
解説
Group Join 句は、結合する 2 つのコレクション間で一致するキー値に基づいて、コレクションを結合します。結合後のコレクションには、第 2 のコレクションの要素のうち、第 1 のコレクションのキー値と一致する要素のコレクションを参照するメンバを格納できます。第 2 のコレクションのグループ化された要素に適用する集計関数を指定することもできます。集計関数の詳細については、「Aggregate 句 (Visual Basic)」を参照してください。
たとえば、管理者のコレクションと従業員のコレクションがあるとします。どちらのコレクションの要素にも、特定の管理者の部下である従業員を識別する ManagerID プロパティがあります。結合操作の結果には、ManagerID 値が一致する管理者と従業員が含まれます。Group Join 操作の結果には、管理者の完全な一覧が含まれます。各管理者の結果には、それぞれの管理者と一致する従業員の一覧を参照するメンバが含まれます。
Group Join 操作の結果作成されるコレクションには、From 句で識別されるコレクションの値と、Group Join 句の Into 句で識別される式の値の組み合わせが含まれます。Into 句で有効な式の詳細については、Aggregate 句 (Visual Basic) を参照してください。
Group Join 操作は、Group Join 演算子の左側で識別されるコレクションを結果としてすべて返します。これは、結合するコレクションの中に一致するものがない場合にも当てはまります。これは、SQL の LEFT OUTER JOIN に似ています。
Join 句を使用して、複数のコレクションを単一のコレクションに結合できます。これは、SQL の INNER JOIN に相当します。
使用例
次のコード例では、Group Join 句を使用して 2 つのコレクションを結合します。
Dim customerList = From cust In customers _
Group Join ord In orders On _
cust.CustomerID Equals ord.CustomerID _
Into CustomerOrders = Group, _
OrderTotal = Sum(ord.Total) _
Select cust.CompanyName, cust.CustomerID, _
CustomerOrders, OrderTotal
For Each customer In customerList
Console.WriteLine(customer.CompanyName & _
" (" & customer.OrderTotal & ")")
For Each order In customer.CustomerOrders
Console.WriteLine(vbTab & order.OrderID & ": " & order.Total)
Next
Next