你如何做一个“不在”查询与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