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