LINQ中的左OUTER JOIN

LEFT OUTER JOIN in LINQ

來源: link 標籤:c#linqjoin 更新時間:

  問題

如何在C#LINQ中執行左外連線到物件而不使用join-on-equals-into子句?有沒有辦法用where子句執行此操作? 正確的問題: 因為內部連線很容易,我有這樣的解決方案

 List<JoinPair> innerFinal = (from l in lefts from r in rights where l.Key == r.Key
                             select new JoinPair { LeftId = l.Id, RightId = r.Id})
 

但對於左外連線我需要一個解決方案.我的東西是這樣的,但它不起作用

 List< JoinPair> leftFinal = (from l in lefts from r in rights
                             select new JoinPair { 
                                            LeftId = l.Id, 
                                            RightId = ((l.Key==r.Key) ? r.Id : 0
                                        })
 

JoinPair是一個類:

 public class JoinPair { long leftId; long rightId; }
 

  最佳答案

如下文所述:

101 LINQ Samples – 左外連線

 var q =
    from c in categories
    join p in products on c.Category equals p.Category into ps
    from p in ps.DefaultIfEmpty()
    select new { Category = c, ProductName = p == null ? "(No products)" : p.ProductName };
 

  相同標籤的其他問題

c#linqjoin