Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LINQ Join with Multiple From Clauses

Tags:

c#

linq

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 in c.Employees select e; 

A LINQ book I have say it's a type of join, but not a proper join (which uses the join keyword). So exactly what type of join is it then?

like image 496
Jonathan Wood Avatar asked Jun 06 '11 19:06

Jonathan Wood


2 Answers

Multiple "from" statements are considered compound linq statments. They are like nested foreach statements. The msdn page does list a great example here

var scoreQuery = from student in students                  from score in student.Scores                  where score > 90                  select new { Last = student.LastName, score }; 

this statement could be rewritten as:

SomeDupCollection<string, decimal> nameScore = new SomeDupCollection<string, float>(); foreach(Student curStudent in students) {    foreach(Score curScore in curStudent.scores)    {       if (curScore > 90)       {          nameScore.Add(curStudent.LastName, curScore);       }    } } 
like image 145
Nathan Tregillus Avatar answered Sep 16 '22 11:09

Nathan Tregillus


This will get translated into a SelectMany() call. It is essentially a cross-join.

Jon Skeet talks about it on his blog, as part of the Edulinq series. (Scroll down to Secondary "from" clauses.)

like image 31
Ken Pespisa Avatar answered Sep 19 '22 11:09

Ken Pespisa