Sign in to track progress and bookmarks.
A standard Join only returns items that match in BOTH lists. A Left Outer Join returns all items from the left list, even if they have no match in the right list.
LINQ doesn't have a LeftJoin() method. Instead, you use a GroupJoin followed by SelectMany with DefaultIfEmpty(). This is the 'Standard Pattern' every .NET developer must memorize.
var leftJoin = from dept in departments
join emp in employees on dept.Id equals emp.DeptId into empGroup
from e in empGroup.DefaultIfEmpty() // Magic happens here
select new { dept.Name, EmployeeName = e?.Name ?? "None" };
Without DefaultIfEmpty(), any department with 0 employees would be filtered out of the results. By calling it, you ensure that even empty groups yield one 'null' item, which preserves the left-side record in the final result set.
Q: "Should I use the LINQ syntax or the Fluent Method syntax for Left Joins?"
Architect Answer: "Use the **Query Syntax** (from/join/into/from) for Left Joins. The equivalent Method Syntax (GroupJoin(...).SelectMany(...)) is significantly more verbose and much harder for a human to parse. This is the one case where Query Syntax is the clear winner for readability."
Quizzes linked to this course—pass to earn certificates.
On this page
1. Implementing with DefaultIfEmpty 2. Why DefaultIfEmpty? 3. Architect Insight