2012-01-23 41 views
6

我有兩個陣列idxListResponse & _index兩者都具有相同的結構。c#linq - 從陣列中獲取不存在於不同陣列中的元素

每個陣列包含許多元件的具有不同特性的其中之一是被稱爲indexdata

這個陣列的每個元件的子陣列具有許多屬性的其中之一是被稱爲數據字段另一個陣列。這具有許多關鍵值對特性。

所以在本質上我有3個獨立數組的層次結構。

我正在尋找獲得層次結構的第一層次+第二層次的所有元素,其中第三層次的物品不匹配,即僅排除那些第三層次物品匹配的第二層次的物品。

我已經嘗試過接近這一些不同的方式,但到目前爲止我沒有得到任何地方,任何人都可以幫助。

僅供參考 - 這是我最新的嘗試

var q = idxListResponse.Index.Where(a => 
    a.IndexData.All(b => 
     b.DataField.All(c => 
      _index.Index.Where(z => 
       z.IndexData.All(y => y.DataField.Contains(c.name)) 
      ) 
     ) 
    ) 
); 

回答

23

Except是這樣做的一個好辦法:

var items = source1.Except(source2); 

會在source1返回的所有項目,除了那些source2

由於您的收藏似乎是不同的類型,你會做這樣的事情:

source1.Except(source2.Select(s => /* selector here */)) 

或者你可以創建自己的實現的IEqualityComparer並用它來比較兩種不同的類型。

+0

謝謝,但只是不能得到那個工作。問題是如果第三個數組中的某個元素的某個屬性匹配,那麼該數組似乎正在被丟棄。我需要第三個數組中每個元素的所有屬性以匹配相應的條目,然後才能將其刪除 – Johnv2020

相關問題