Group Join (Cláusula, Visual Basic)

Combina dos colecciones en una sola colección jerárquica. La operación de combinación se basa en claves coincidentes.

Sintaxis

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

Partes

Término Definición
element Obligatorio. Variable de control para la colección que se va a combinar.
type Opcional. Tipo de element. Si no se especifica type, el tipo de element se deduce de collection.
collection Necesario. Colección que se va a combinar con la colección que se encuentra en el lado izquierdo del operador Group Join. Una cláusula Group Join se puede anidar en una cláusula Join o en otra cláusula Group Join.
key1 Equals key2 Necesario. Identifica las claves de las colecciones que se van a combinar. Debe usar el operador Equals para comparar las claves de las colecciones que se van a combinar. Puede combinar condiciones de combinación mediante el operador And para identificar varias claves. El parámetro key1 debe ser de la colección del lado izquierdo del operador Join. El parámetro key2 debe ser de la colección del lado derecho del operador Join.

Las claves usadas en la condición de combinación pueden ser expresiones que incluyan más de un elemento de la colección. Sin embargo, cada expresión de clave solo puede contener elementos de su colección respectiva.
expressionList Necesario. Una o más expresiones que identifican cómo se agregan los grupos de elementos de la colección. Si desea identificar el nombre de un miembro para los resultados agrupados, use la palabra clave Group (<alias> = Group). También puede incluir funciones de agregado para aplicar al grupo.

Comentarios

La cláusula Group Join combina dos colecciones basadas en los valores clave coincidentes de las colecciones que se van a combinar. La colección resultante puede contener un miembro que haga referencia a una colección de elementos de la segunda colección que coincidan con el valor de clave de la primera colección. También puede especificar funciones de agregado que se aplicarán a los elementos agrupados de la segunda colección. Para información sobre las funciones agregadas, consulte Cláusula Aggregate.

Considere, por ejemplo, una colección de administradores y una colección de empleados. Los elementos de ambas colecciones tienen una propiedad ManagerID que identifica a los empleados que rinden cuentas a un administrador determinado. Los resultados de una operación de combinación contendrán un resultado para cada administrador y empleado con un valor ManagerID coincidente. Los resultados de una operación Group Join contendrán la lista completa de administradores. Cada resultado de administrador tendrá un miembro que hace referencia a la lista de empleados que es coincidencia para el administrador específico.

La colección que resulta a partir de una operación Group Join puede contener cualquier combinación de valores de la colección que se identifica en la cláusula From y las expresiones identificadas en la cláusula Into de la cláusula Group Join. Para más información sobre las expresiones válidas para la cláusula Into, consulte Cláusula Aggregate.

Una operación Group Join devolverá todos los resultados de la colección identificada en el lado izquierdo del operador Group Join. Esto se cumple incluso si no hay coincidencias en la colección que se combina. Es similar a LEFT OUTER JOIN en SQL.

Puede usar la cláusula Join para combinar colecciones en una colección única. Esto equivale a INNER JOIN en SQL.

Ejemplo

En el ejemplo de código siguiente, se combinan dos colecciones mediante la 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

Consulte también