2011-08-12 91 views
1

我知道你可以檢查,如果在這樣的另一份名單存在從一個列表中的所有元素(從另一張貼在這裏):檢查具有某個值的集合中的所有項目是否都在Linq的另一個集合中?

bool result = list.All(x => dataList.Contains(x)); 

但是我怎麼檢查是否在另一個列表中存在的所有元素都具有相同的「子值「?

我有兩個xml文檔_mapdoc_mapdocCopy,我想比較所有<file>元素的屬性路徑都在其他xml文檔中找到。

所以我就開始做類似上面的東西:

if (_mapdocCopy.Descendants("file").All(x => _mapdoc.Descendants("file").Contains(x))) 

但我馬上意識到這將比較整個<file>元素,他們往往會不一樣(他們可能有不同的子元素),即使他們的「路徑」屬性具有相同的值。而這只是我想要測試的。

我也(在不同的上下文中)希望能夠得到那個不一樣的東西(仍然只關注路徑屬性),所以幫助也是值得讚賞的。但這是一個不同的問題,我仍然需要上面的Linq查詢。

任何想法?

回答

3

我一起更換.Contains.Any(適當的條件)的線條認爲。喜歡的東西:

if (_mapdocCopy.Descendants("file").All(
     x => _mapdoc.Descendants("file").Any(y => y.path == x.path))) 

編輯:廣告第二部分,蠻力的方法是:

... = _mapdocCopy.Descendants("file").Where(
     x => !_mapdoc.Descendants("file").Any(y => y.path == x.path))) 

(採取那些沒有另一組中存在 - 注意,關閉被否定) 。但也有linq方法。我不知道我有正確的語法,但它會是這樣的:

... = _mapdocCopy.Descendants("file").Except(
     _mapdoc.Descendants("file"), 
     (x, y) => x.path == y.path) 

(除了我在哪裏不知道是否關閉將轉換成的IEqualityComparer或者需要一些額外的兩輪牛車吧)

+0

謝謝,你是否也知道我的第二個問題的答案,獲得不同的值集合? – Anders

+0

@Anders:好的,這裏有一些更新。 –

+0

非常感謝!那很完美。 – Anders

相關問題