linq中的左外连接

我有以下查询,但我不知道如何在表1上进行左外连接。

var query = (from r in table1 join f in table2 on r.ID equals f.ID select new { r.ID, r.FirstName, r.LastName, FirstNameOnRecord = (f != null ? f.FirstName : string.Empty), LastNameOnRecord = (f != null ? f.LastName : string.Empty), NameChanged = (f != null ? (f.FirstName.CompareTo(r.FirstName) == 0 && f.LastName.CompareTo(r.LastName) == 0) : false) }).ToList(); 

请参阅此示例或此示例以了解更多信息,您的情况将是这样的 –

 var query = from r in table1 join f in table2 on r.ID equals f.ID into g from f in g.DefaultIfEmpty() select new { r.ID , r.FirstName , r.LastName , FirstNameOnRecord = (f != null ? f.FirstName : string.Empty) , LastNameOnRecord = (f != null ? f.LastName : string.Empty) , NameChanged = (f != null ? (f.FirstName.CompareTo(r.FirstName) == 0 && f.LastName.CompareTo(r.LastName) == 0) : false) }).ToList(); 

这是左外连接的一个很好的细分。

你看过这些例子吗? 你可能对Linq的Left Outer Join 这部分感兴趣。

使用lambda表达式

 db.Categories .GroupJoin( db.Products, Category => Category.CategoryId, Product => Product.CategoryId, (x, y) => new { Category = x, Products = y }) .SelectMany( xy => xy.Products.DefaultIfEmpty(), (x, y) => new { Category = x.Category, Product = y }) .Select(s => new { CategoryName = s.Category.Name, ProductName = s.Product.Name })