Код, который вы указали:
from c in company
from e in c.Employees
select e;
... будет составлять список каждого сотрудника для каждой компании в переменной company
. Если сотрудник работает для двух компаний, они будут включены в список дважды.
Единственное «соединение», которое может произойти здесь, - это когда вы говорите c.Employees
. В поддерживаемом SQL-провайдере это приведет к внутреннему соединению из таблицы Company
в таблицу Employee
.
Однако конструкция double [from
часто используется для выполнения «объединения» «вручную, например:
from c in companies
from e in employees
where c.CompanyId == e.CompanyId
select e;
Это будет иметь такой же эффект, как и код, который вы опубликовали, с потенциальными незначительными различиями в зависимости от того, что содержит переменная employees
. Это также было бы эквивалентно следующему join
:
from c in companies
join e in employees
on c.CompanyId equals e.CompanyId
select e;
Если вы хотите декартово произведение, однако, вы можете просто удалить предложение where
. (Чтобы все было что-то стоит, вы, вероятно, тоже захотите немного изменить select
.)
from c in companies
from e in employees
select new {c, e};
Этот последний запрос предоставит вам все возможные комбинации компании и сотрудника.