Jonathan Wood Jonathan Wood - 3 months ago 6
C# Question

LINQ Join with Multiple From Clauses

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?

Answer

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);
      }
   }
}