Entity Framework 10 was released with LST (Long Term Support) in November 2025 and itrun with .NET 10 (or above) only. EF 10 brings many improvements, including the long-awaited support for outer joins through the new LINQ operators LeftJoin and RightJoin.
Quick refresh – Inner Join Vs Outer Join
Inner Join – Return matches only
Left Outer Join – Return all rows from the left with matches from the right and null when no match found
Right Outer Join - – Return all rows from the right with matches from the left and null when no match found
Way to write Outer join before EF 10
Before EF 10, the way to write a left outer join was to use a group join followed by DefaultIfEmpty(). This is the pattern that maps to a SQL LEFT JOIN.
Example: Consider the following table relationship between the Employee and Department tables, where the Employee table has an optional DepartmentId column.

The following query shows an equivalent left outer join in EF (prior to EF 10). This is the canonical way to write a left join in EF Core.
var result = (from e in context.Employee
join d in context.Department
on e.DepartmentID equals d.ID into employeeDepartment
from ed in employeeDepartment.DefaultIfEmpty()
select new
{
Id = e.ID ,
Name = e.Name,
Department = ed.Name
}).ToList();
You can also, write left join using group join followed by DefaultIfEmpty().
var query = context.Employee
.GroupJoin(context.Department,
e => e.DepartmentID,
d => d.ID,
(emps, dep) => new { emps, dep })
.SelectMany(
g=> g.dep.DefaultIfEmpty(),
(a, e) => new
{
Id = a.emps.ID ,
Name = a.emps.Name,
Department = e.Name
}).ToList();SQL Generated in above two cases.



Join the conversation! Your thoughts help the community grow.