2011-06-07 83 views
2

我有一个名为MyList的int列表;它来自于linq到sql查询的结果。 我有一个名为ExistingObjectsList的MyObject的列表,其中包含一个int作为其属性之一。加入null找到缺失的元素

我正在创建一个新列表,其中包含MyObjectsList中但不包含MyList中的所有整数。

这是我到目前为止有:

var NewObjects = (from obj in MyObjectsList 
        join x in ExistingObjectsList on 
        obj.ID equals x into outer 
        from o in outer 
        where o == null 
        select o).ToList(); 

我敢肯定,这是简单的,但此刻它不工作。

感谢您的建议。

+0

你想从MyObjectsList或ExistingObjectsList的对象? – Magnus 2011-06-07 19:06:38

+0

您是否尝试过使用联合并获取不同的对象。 (http://msdn.microsoft.com/en-us/library/bb386993.aspx) – 2011-06-07 19:07:05

回答

6
var NewObjects = ExistingObjectsList.Where(i => !MyObjectsList.Any(o => o.ID == i); 

在你的问题你提到ExistingObjectsList that contains an int as one of its properties,但它不是在你的示例查询使用,但如果是这样的话,那么代替o => o.ID == i使用o => o.ID == i.thatPropery

+0

这是编译,但它返回0,我知道应该有14个元素基于我正在使用的示例数据。 – frenchie 2011-06-07 19:10:49

+0

好的,我修好了;它是o => o == i.ID。你的回答非常优雅;谢谢。 – frenchie 2011-06-07 19:14:50

0

的概念,你正在寻找和几乎已实施正确的是外连接。稍作修改,您的代码就可以为您的对象清单(可能是)整数列表工作。

var NewObjects = (from obj in MyObjectsList 
     join x in ExistingObjectsList.Cast<int?>() on // changed here 
     obj.ID equals x into outer 
     from o in outer.DefaultIfEmpty() // and here 
     where o == null 
     select obj).ToList(); // and here