code blog foo - tag line bar

Left Join on multiple tables in Linq to SQL

Wow really? A blog post on Linq to SQL? Yep...I still use it. It's exactly what I need...a light-weight ORM. Anyways, here's an example of a LEFT OUTER JOIN on multiple tables in Linq to SQL:

from expense in expenseDataContext.ExpenseDtos
where expense.Id == expenseId //some expense id that was passed in
from category 
// left join on categories table if exists
in expenseDataContext.CategoryDtos
                     .Where(c => c.Id == expense.CategoryId)
                     .DefaultIfEmpty() 
// left join on expense type table if exists
from expenseType 
in expenseDataContext.ExpenseTypeDtos
                     .Where(e => e.Id == expense.ExpenseTypeId)
                     .DefaultIfEmpty()
// left join on currency table if exists
from currency 
in expenseDataContext.CurrencyDtos
                     .Where(c => c.CurrencyID == expense.FKCurrencyID)
                     .DefaultIfEmpty() 
select new 
{ 
    Expense = expense,
    // category will be null if join doesn't exist
    Category = category,
    // expensetype will be null if join doesn't exist
    ExpenseType = expenseType,
    // currency will be null if join doesn't exist
    Currency = currency  
} 

this StackOverflow question is helpful


Written: 3/25/2010