LINQ Join with Multiple From Clauses

前端 未结 4 1806
耶瑟儿~
耶瑟儿~ 2020-12-08 02:18

When writing LINQ queries in C#, I know I can perform a join using the join keyword. But what does the following do?

from c in Companies
from e          


        
4条回答
  •  情书的邮戳
    2020-12-08 02:30

    The code that you listed:

    from c in company
    from e in c.Employees
    select e;
    

    ... will produce a list of every employee for every company in the company variable. If an employee works for two companies, they will be included in the list twice.

    The only "join" that might occur here is when you say c.Employees. In an SQL-backed provider, this would translate to an inner join from the Company table to the Employee table.

    However, the double-from construct is often used to perform "joins" manually, like so:

    from c in companies
    from e in employees
    where c.CompanyId == e.CompanyId
    select e;
    

    This would have a similar effect as the code you posted, with potential subtle differences depending on what the employees variable contains. This would also be equivalent to the following join:

    from c in companies
    join e in employees
       on c.CompanyId equals e.CompanyId
    select e;
    

    If you wanted a Cartesian product, however, you could just remove the where clause. (To make it worth anything, you'd probably want to change the select slightly, too, though.)

    from c in companies
    from e in employees
    select new {c, e};
    

    This last query would give you every possible combination of company and employee.

提交回复
热议问题