Linq中的左外连接

Posted

技术标签:

【中文标题】Linq中的左外连接【英文标题】:Left outer join in Linq 【发布时间】:2011-08-04 20:16:41 【问题描述】:

我知道有很多关于这方面的帖子,但它们都是关于具体问题的,我不明白什么是左、右和任何东西

我有 2 个列表:左侧和右侧。我需要选择左边所有不在右边的元素。

List<T> left = GetLeft();
List<T> right = GetRight();

IEnumerable result = // Have no idea

我该怎么做?

【问题讨论】:

【参考方案1】:

这听起来根本不像是一个连接...听起来像:

var result = left.Except(right);

【讨论】:

貌似就是这样,SQL太习惯了【参考方案2】:

这是我找到的解决方案。

查找所有未购买的客户:

SQL:

   Select c.Name from Customers c             
   Left Outer Join Purchases p on c.customerid=p.customerid 
   where p.price is null

LINQ:

   from c in Customers
   join p in Purchases on c.customerid=p.customerid into custPurchases
   from cp in custPurchases.DefaultIfEmpty()
   where cp==null
   select new
   
   cc.Name
   

【讨论】:

以上是关于Linq中的左外连接的主要内容,如果未能解决你的问题,请参考以下文章

Linq中的lambda /方法语法中的左外连接[重复]

csharp LINQ中的左外连接

Linq中的左外连接

LINQ:具有多个条件的左外连接

将两个查询的左外连接转换为 LINQ

使用 Linq to Sql 的左外连接结果问题