次の方法で共有


Group Join 句 (Visual Basic)

2 つのコレクションを 1 つの階層コレクションに結合します。 結合操作は、一致するキーに基づいています。

構文

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) を使用します。 グループに適用する集計関数を含めることもできます。

注釈

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

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

Group Join操作の結果のコレクションには、From句で識別されるコレクションの値と、Group Join 句のInto句で識別される式の任意の組み合わせを含めることができます。 Into句の有効な式の詳細については、「集計句」を参照してください。

Group Join操作は、Group Join演算子の左側で識別されたコレクションからすべての結果を返します。 これは、結合されるコレクションに一致がない場合でも当てはまります。 これは SQL の LEFT OUTER JOIN のようなものです。

Join句を使用して、コレクションを 1 つのコレクションに結合できます。 これは、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

こちらも参照ください