Left Join in C# LINQ

By FoxLearn 1/20/2025 3:15:15 AM   7
A Left Join in C# LINQ is used to combine two data sources based on a common key, ensuring that every element in the first (left) data source is included in the result set, even if there is no corresponding element in the second (right) data source.

This is commonly used when working with relational data, where one table might not have corresponding records in another table.

How to Use Left Join in LINQ

Here are the steps to perform a left join in LINQ:

  • Prepare the Data Sources: Define the two collections or tables to be joined.
  • Perform a Group Join: Use the join keyword to create a group join based on a common key.
  • Handle Missing Matches: Use DefaultIfEmpty to include items from the left data source even if no matching item exists in the right data source.
  • Project the Results: Use the select keyword to create a new object or anonymous type with properties from both data sources.

For example: Students and Courses

// Data source: Students and their enrolled course IDs
var students = new[]
{
    new { Id = 1, Name = "John", CourseId = 101 },
    new { Id = 2, Name = "Emma", CourseId = 102 },
    new { Id = 3, Name = "Sam", CourseId = 103 }, // No matching course
    new { Id = 4, Name = "Sophia", CourseId = 0 } // No course
};

// Data source: Courses
var courses = new[]
{
    new { Id = 101, CourseName = "Mathematics" },
    new { Id = 102, CourseName = "Science" }
};

// Perform a Left Join
var leftJoin = from student in students
               join course in courses
               on student.CourseId equals course.Id into courseGroup
               from course in courseGroup.DefaultIfEmpty()
               select new
               {
                   student.Name,
                   CourseName = course?.CourseName ?? "No Course"
               };

// Display the results
foreach (var result in leftJoin)
{
    Console.WriteLine($"{result.Name} is enrolled in {result.CourseName}");
}

In this example:

  • Students is the left data source, and Courses is the right data source.
  • The join keyword creates a group join based on CourseId.
  • The DefaultIfEmpty method ensures that every student appears in the result, even if they don't have a corresponding course.

Output:

John is enrolled in Mathematics  
Emma is enrolled in Science  
Sam is enrolled in No Course  
Sophia is enrolled in No Course

This approach is efficient and leverages LINQ's readability to perform operations akin to SQL's LEFT JOIN.