2016-04-29 112 views
3

我有兩個IEnumerable對象,我想驗證它們是否包含其他的所有元素。IEnumerable包含IEnumerable

我使用的是obj1.Intersect(obj2).Any(),但交叉點不像我所期望的那樣工作。即使只有obj2中的一個元素存在於obj1中,它也會返回true。

有什麼方法可以驗證obj2的所有元素是否存在於obj1

+2

使用'All',而不是'Intersect.Any' – zerkms

+0

如果你想要它們的順序相同,你可以使用'SequenceEqual'。否則,您可以檢查交集與子序列具有相同的長度。 – Blorgbeard

+0

@zerkms'All()'不起作用。什麼? 'Any()'表示存在任何項目,'All()'沒有lambda時沒有意義。 – Blorgbeard

回答

7

沒有單一的LINQ方法,它不需要至少指定一個lambda來完成你所需要的。然而,有多種方式可以用LINQ來實現。這裏有幾個選項(以測試是否obj2obj1一個子集):

obj1.Intersect(obj2).Count() == obj2.Count() 

obj2.All(x=>obj1.Contains(x)) 

obj2.Except(obj1).Any() 
+4

如果'obj2'重複,第一個可能會返回誤報。 – zerkms

+0

第一種方案奏效! @zerkms你是對的...我會確保沒有重複存在。 – Snapper

+0

'.Except()'?應該做什麼操作(史蒂文的第三個例子) – Mafii