Clausola Group Join (Visual Basic)

Combina due raccolte in un'unica raccolta gerarchica. L'operazione di join è basata sulle chiavi corrispondenti.

Sintassi

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

Parti

Termine Definizione
element Obbligatorio. Variabile di controllo per la raccolta in fase di aggiunta.
type Facoltativo. Tipo di element. Se non viene specificato alcun valore type, il tipo di element viene dedotto da collection.
collection Obbligatorio. Raccolta da combinare con quella che si trova sul lato sinistro dell'operatore Group Join. Una clausola Group Join può essere annidata in una clausola Join o in un'altra clausola Group Join.
key1 Equals key2 Obbligatorio. Identifica le chiavi per le raccolte in fase di aggiunta. È necessario usare l'operatore Equals per confrontare le chiavi delle raccolte in fase di aggiunta. È possibile combinare le condizioni di join usando l'operatore And per identificare più chiavi. Il parametro key1 deve provenire dalla raccolta a sinistra dell'operatore Join. Il parametro key2 deve provenire dalla raccolta a destra dell'operatore Join.

Le chiavi usate nella condizione di join possono essere espressioni che includono più elementi della raccolta. Tuttavia, ogni espressione chiave può contenere solo elementi della rispettiva raccolta.
expressionList Obbligatorio. Una o più espressioni che identificano come vengono aggregati i gruppi di elementi dalla raccolta. Per identificare un nome di membro per i risultati raggruppati, usare la parola chiave Group (<alias> = Group). È anche possibile includere funzioni di aggregazione da applicare al gruppo.

Osservazioni:

La clausola Group Join combina due raccolte in base ai valori di chiave corrispondenti delle raccolte unite in join. La raccolta risultante può contenere un membro che fa riferimento a una raccolta di elementi della seconda raccolta che corrispondono al valore della chiave della prima raccolta. È anche possibile specificare funzioni di aggregazione da applicare agli elementi raggruppati della seconda raccolta. Per informazioni sulle funzioni di aggregazione, vedere Clausola di aggregazione.

Si consideri, ad esempio, una raccolta di manager e una raccolta di dipendenti. Gli elementi di entrambe le raccolte hanno una proprietà ManagerID che identifica i dipendenti che fanno capo a un determinato manager. I risultati di un'operazione di join contengono un risultato per ogni responsabile e dipendente con un valore ManagerID corrispondente. I risultati di un'operazione Group Join conterranno l'elenco completo dei manager. Ogni risultato del manager avrebbe un membro con riferimento all'elenco di dipendenti corrispondenti al manager specifico.

La raccolta risultante da un'operazione Group Join può contenere qualsiasi combinazione di valori della raccolta identificata nella clausola From e le espressioni identificate nella clausola Into della clausola Group Join. Per altre informazioni sulle espressioni valide per la clausola Into, vedere Clausola di aggregazione.

Un'operazione Group Join restituirà tutti i risultati della raccolta identificata sul lato sinistro dell'operatore Group Join. Questo vale anche se non sono presenti corrispondenze nella raccolta da unire. È come un LEFT OUTER JOIN in SQL.

È possibile usare la clausola Join per combinare le raccolte in una singola raccolta. È l'equivalente di un INNER JOIN in SQL.

Esempio

Nell'esempio di codice seguente vengono unite due raccolte usando la clausola 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

Vedi anche