top of page

How to use Left Join in C# LINQ

A left join in C# LINQ is a type of join that returns each element of the first (left) data source, regardless of whether it has any correlated elements in the second data source. In this article, we will learn how to use Left Join in C# LINQ.


You can use LINQ to perform a left join by calling the DefaultIfEmpty method on the results of a group join.


Before going further you may be interested in the following articles.

How to use Left Join in C# LINQ.

The steps to implement left join in C# LINQ are:


STEP 1: Define the two data sources that you want to join, such as two collections of objects or two database tables.


STEP 2: Use the join keyword to perform an inner join on the two data sources based on a common key or attribute, such as an ID or a name. This will create a group join that associates each element of the first data source with a sequence of matching elements from the second data source.


STEP 3: Use the into keyword to store the results of the group join in a temporary identifier.


STEP 4: Use the from keyword to iterate over each sequence of matching elements from the group join.


STEP 5: Use the DefaultIfEmpty method to ensure that each element of the first data source is included in the result even if it has no matches in the second data source. This method will return a default value (such as null) for each empty sequence.


STEP 6: Use the select keyword to project the desired properties from each element of the first data source and its corresponding sequence of matching elements from the second data source into a new anonymous type or a named type.


STEP 7: Optionally, use other LINQ operators such as where, orderby, groupby, etc. to filter, sort, or group the results of the left join.


Here is an example of how to implement a left join in C# LINQ:

// Assume we have two data sources: products and categories
var leftJoin = from product in products
               join category in categories
               on product.CategoryId equals category.Id into joined
               from j in joined.DefaultIfEmpty()
               select new { product.Name, CategoryName = j?.CategoryName ?? string.Empty };

// Display the resultsforeach (var result in leftJoin)
{
    Console.WriteLine($"Product {result.Name} belongs to category {result.CategoryName}");
}

Output:

Left Join in C# LINQ - output

In this code, we're performing a left join between two data sources - products and categories - based on their CategoryId and Id fields, respectively. We're using the DefaultIfEmpty method to ensure that all products are included in the result, even if they don't have a matching category. Finally, we're selecting a new object with the product name and category name (or an empty string if the category is null) and displaying the results using a foreach loop.

0 comments
bottom of page