Group Join, clause (Visual Basic)

Combine deux collections en une collection hiérarchique unique. L’opération de jointure est basée sur des clés correspondantes.

Syntaxe

Group Join element [As type] In collection _  
  On key1 Equals key2 [ And key3 Equals key4 [... ] ] _  
  Into expressionList  

Éléments

Terme Définition
element Obligatoire. La variable de contrôle pour la collection en cours de jointure.
type Optionnel. Type d'élément element. Si aucun type n’est spécifié, le type de element est inféré de collection.
collection Obligatoire. La collection à combiner avec la collection qui se trouve sur le côté gauche de l’opérateur Group Join. Une clause Group Join peut être imbriquée dans une clause Join ou dans une autre clause Group Join.
key1 Equals key2 Obligatoire. Identifie les clés pour les collections en cours de jointure. Vous devez utiliser l’opérateur Equals pour comparer les clés des collections en cours de jointure. Vous pouvez combiner des conditions de jointure à l’aide de l’opérateur And pour identifier plusieurs clés. Le paramètre key1 doit provenir de la collection sur le côté gauche de l’opérateur Join. Le paramètre key2 doit provenir de la collection sur le côté droit de l’opérateur Join.

Les clés utilisées dans la condition de jointure peuvent être des expressions qui incluent plus d’un élément de la collection. Toutefois, chaque expression clé ne peut contenir que des éléments de sa collection respective.
expressionList Obligatoire. Une ou plusieurs expressions qui identifient la façon dont les groupes d’éléments de la collection sont agrégés. Pour identifier un nom de membre pour les résultats groupés, utilisez le mot clé Group (<alias> = Group). Vous pouvez aussi inclure des fonctions d’agrégation à appliquer au groupe.

Notes

La clause Group Join combine deux collections en fonction des valeurs de clé correspondantes des collections en cours de jointure. La collection résultante peut contenir un membre qui fait référence à une collection d’éléments de la deuxième collection qui correspondent à la valeur de clé de la première collection. Vous pouvez également spécifier des fonctions d’agrégation à appliquer aux éléments groupés de la deuxième collection. Pour obtenir des informations sur les fonctions d’agrégation, consultez Aggregate, clause.

Prenons, par exemple, une collection de managers et une collection d’employés. Les éléments des deux collections ont une propriété ManagerID qui identifie les employés qui relèvent d’un manager particulier. Les résultats d’une opération de jointure contiennent un résultat pour chaque manager et employé avec une valeur ManagerID correspondante. Les résultats d’une opération Group Join devraient contenir la liste complète des managers. Chaque résultat du manager aurait un membre qui a référencé la liste des employés qui étaient une correspondance pour le manager spécifique.

La collection résultant d’une opération Group Join peut contenir n’importe quelle combinaison de valeurs de la collection identifiée dans la clause From et les expressions identifiées dans la clause Into de la clause Group Join. Pour plus d’informations sur les expressions valides pour la clause Into, consultez Aggregate, clause.

Une opération Group Join retourne tous les résultats de la collection identifiée sur le côté gauche de l’opérateur Group Join. Cela est vrai même s’il n’y a aucune correspondance dans la collection en cours de jointure. On peut comparer cela à un LEFT OUTER JOIN dans SQL.

Vous pouvez utiliser la clause Join pour combiner des collections en une seule collection. Cela est équivalent à un INNER JOIN dans SQL.

Exemple

L’exemple de code suivant joint deux collections à l’aide de la clause Group Join.

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

Voir aussi