2011-06-07 87 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