How about something like the query below? It'll give you an anonymous type consisting of 3 properties. Some will be null when the 'left join' would've produced null.
var products=
from p in db.Products
from pc
in db.ProductCategory
.Where(x => x.Id == p.ProductCategoryId)
.DefaultIfEmpty()
from ps
in db.ProductStatus
.Where(x => x.Id == p.ProductStatusId)
.DefaultIfEmpty()
select new { Product = p, ProductCategory = pc, ProductStatus = ps}
p.campbell
2010-09-23 01:54:45