el código que ha enumerado:
from c in company
from e in c.Employees
select e;
... producirá una lista de cada empleado para cada compañía en la variable company
. Si un empleado trabaja para dos compañías, se incluirán en la lista dos veces.
La única "combinación" que puede aparecer aquí es cuando dices c.Employees
. En un proveedor respaldado por SQL, esto se traduciría en una combinación interna de la tabla Company
en la tabla Employee
.
Sin embargo, el doble from
constructo se utiliza a menudo para llevar a cabo "une" manualmente, así:
from c in companies
from e in employees
where c.CompanyId == e.CompanyId
select e;
Esto tendría un efecto similar como el código que envió, con posibles diferencias sutiles en función de lo la variable employees
contiene. Esto también sería equivalente a la siguiente join
:
from c in companies
join e in employees
on c.CompanyId equals e.CompanyId
select e;
Si quieres un producto cartesiano, sin embargo, sólo podría eliminar la cláusula where
. (Para que sea digno de cualquier cosa, lo que probablemente quiere cambiar el select
poco, demasiado, sin embargo.)
from c in companies
from e in employees
select new {c, e};
Esta última consulta que daría a cada posible combinación de empresa y los empleados.
Linq-to-Objects, -Sql, -Entidades? En -Objects, eso no es una unión, sino una operación 'SelectMany'. En los demás, se podría traducir a la izquierda o a la parte interna según los datos. –
@Anthony: No he usado tanto LINQ. Entonces, mi pregunta era solo general y no se limitaba a ningún proveedor específico. Sin embargo, en última instancia, probablemente termine con LINQ to Entities. –