你如何做一个“不在”查询与LINQ?

我有两个集合在两个集合中都有属性Email 。 我需要获得第一个列表中Email不存在于第二个列表中的项目列表。 使用SQL我只是使用“不在”,但我不知道在LINQ中的等价物。 这是如何完成的?

到目前为止,我有一个加入,如...

var matches = from item1 in list1
join item2 in list2 on item1.Email equals item2.Email
select new { Email = list1.Email };

但我不能加入,因为我需要差异,加入会失败。 我需要一些使用Contains或Exists的方式,我相信。 我还没有找到一个例子来做到这一点。


我不知道这是否会帮助你,但..

NorthwindDataContext dc = new NorthwindDataContext();    
dc.Log = Console.Out;

var query =    
    from c in dc.Customers    
    where !(from o in dc.Orders    
            select o.CustomerID)    
           .Contains(c.CustomerID)    
    select c;

foreach (var c in query) Console.WriteLine( c );

从LINQ的NOT IN子句到Marco Russo的SQL


你想要Except运算符。

var answer = list1.Except(list2);

这里更好的解释:http://blogs.msdn.com/charlie/archive/2008/07/12/the-linq-set-operators.aspx

注:此技术仅适用于基元类型,因为您必须实施IEqualityComparer才能将Except方法用于复杂类型。


第一个列表中邮件不存在于第二个列表中的项目。

from item1 in List1
where !(list2.Any(item2 => item2.Email == item1.Email))
select item1;
链接地址: http://www.djcxy.com/p/34265.html

上一篇: How would you do a "not in" query with LINQ?

下一篇: can one change the order via parameter?