Cláusula Join Group (Visual Basic)

Combina duas coleções em uma única coleção hierárquica. A operação de junção é baseada em chaves correspondentes.

Sintaxe

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

Partes

Termo Definição
element Obrigatórios. A variável de controle para a coleção que está sendo ingressadas.
type Opcional. O tipo de element. Se nenhum type for especificado, o tipo de element é inferido de collection.
collection Obrigatórios. A coleção a ser combinada com a coleção no lado esquerdo do operador Group Join. Uma cláusula Group Join pode ser aninhada em uma cláusula Join ou em outra cláusula Group Join.
key1 Equals key2 Obrigatórios. Identifica as chaves para as coleções sendo ingressadas. Você deve usar o operador Equals para comparar as chaves das coleções que estão sendo ingressadas. Você pode combinar condições de junção usando o operador And para identificar várias chaves. O parâmetro key1 deve vir da coleção do lado esquerdo do operador Join. O parâmetro key2 deve vir da coleção do lado direito do operador Join.

As chaves usadas na condição de junção podem ser expressões que incluem mais de um item da coleção. No entanto, cada expressão de chave pode conter apenas itens de sua respectiva coleção.
expressionList Obrigatórios. Uma ou mais expressões que identificam como os grupos de elementos da coleção são agregados. Para identificar um nome de membro para os resultados agrupados, use a palavra-chave Group (<alias> = Group). Você também pode incluir funções de agregação a serem aplicadas ao grupo.

Comentários

A cláusula Group Join combina duas coleções com base em valores de chave correspondentes das coleções que estão sendo ingressadas. A coleção resultante pode conter um membro que faz referência a uma coleção de elementos da segunda coleção que correspondem ao valor da chave da primeira coleção. Você também pode especificar funções de agregação a serem aplicadas aos elementos agrupados da segunda coleção. Para obter mais informações sobre funções de agregação, consulte Cláusula agregada.

Considere, por exemplo, uma coleção de gerentes e uma coleção de funcionários. Elementos de ambas as coleções têm uma propriedade ManagerID que identifica os funcionários que se reportam a um gerente específico. Os resultados de uma operação de junção conteriam um resultado para cada gerente e funcionário com um valor ManagerID correspondente. Os resultados de uma operação Group Join conteriam a lista completa de gerentes. Cada resultado de gerente teria um membro que faria referência à lista de funcionários correspondentes ao gerente específico.

A coleção resultante de uma operação Group Join pode conter qualquer combinação de valores da coleção identificada na cláusula From e as expressões identificadas na cláusula Into da cláusula Group Join. Para obter mais informações sobre expressões válidas para a cláusula Into, consulte aCláusula agregada.

Uma operação Group Join retornará todos os resultados da coleção identificada no lado esquerdo do operador Group Join. Isso é válido mesmo se não houver nenhuma correspondência na coleção que está sendo ingressada. Isso é como um LEFT OUTER JOIN no SQL.

Você pode usar a cláusula Join para combinar coleções em uma única coleção. Isso é equivalente a INNER JOIN no SQL.

Exemplo

O exemplo de código a seguir une duas coleções usando a cláusula 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

Confira também