Group Join 句 (Visual Basic)

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 句で入れ子にすることができます。
key1 Equals key2 必須です。 結合されるコレクションのキーを識別します。 Equals 演算子を使用して、結合されるコレクションのキーを比較する必要があります。 結合条件を組み合わせるには、複数のキーを識別するために、And 演算子を使用します。 key1 パラメーターは、Join 演算子の左側にあるコレクションからのものである必要があります。 key2 パラメーターは、Join 演算子の右側にあるコレクションからのものである必要があります。

結合条件で使用されるキーは、コレクションからの複数の項目を含む式にすることができます。 ただし、各キー式には、それぞれのコレクションからの項目のみを含めることができます。
expressionList 必須です。 コレクションの要素のグループを集計する方法を示す 1 つ以上の式です。 グループ化された結果のメンバー名を特定するには、Group キーワード (<alias> = Group) を使用します。 グループに適用する集計関数を含めることもできます。

Remarks

Group Join 句は、結合されるコレクションからの一致するキー値に基づいて、2 つのコレクションを組み合わせます。 結果のコレクションには、最初のコレクションのキー値に一致する 2 つ目のコレクションの要素のコレクションを参照するメンバーを含めることができます。 さらに、2 つ目のコレクションのグループ化された要素に適用する集計関数を指定することもできます。 集計関数の詳細については、「Aggregate 句 」を参照してください。

たとえば、マネージャーのコレクションと従業員のコレクションを考えてみましょう。 両方のコレクションの要素には、特定のマネージャーに報告する従業員を識別する ManagerID プロパティがあります。 結合操作の結果には、一致する ManagerID 値を持つ各マネージャーと従業員の結果が含まれます。 Group Join 操作の結果には、マネージャーの完全な一覧が含まれます。 各マネージャーの結果には、特定のマネージャーに一致した従業員の一覧を参照したメンバーが含まれます。

Group Join 操作の結果のコレクションには、From 句に指定されたコレクションと Group Join 句の Into 句に指定された式からの値の任意の組み合わせが含まれる可能性があります。 Into 句の有効な式の詳細については、「Aggregate 句」を参照してください。

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

関連項目