检查集合中具有特定值的所有项是否都位于具有Linq的另一个集合中?

检查集合中具有特定值的所有项是否都位于具有Linq的另一个集合中?,linq,c#-4.0,Linq,C# 4.0,我知道您可以检查一个列表中的所有元素是否都存在于另一个列表中,如下所示(来自此处的另一篇文章): 但是如何检查另一个列表中的所有元素是否具有相同的“子值” 我有两个xml文档\u mapdoc和\u mapdocCopy,我想比较在其他xml文档中找到属性路径的所有元素 所以我开始做类似上面的事情: if (_mapdocCopy.Descendants("file").All(x => _mapdoc.Descendants("file").Contains(x))) 但我立即意识到,

我知道您可以检查一个列表中的所有元素是否都存在于另一个列表中,如下所示(来自此处的另一篇文章):

但是如何检查另一个列表中的所有元素是否具有相同的“子值”

我有两个xml文档
\u mapdoc
\u mapdocCopy
,我想比较在其他xml文档中找到属性路径的所有
元素

所以我开始做类似上面的事情:

if (_mapdocCopy.Descendants("file").All(x => _mapdoc.Descendants("file").Contains(x)))
但我立即意识到,这将比较整个
元素,它们通常不相同(它们可能有不同的子元素),即使它们的“path”属性具有相同的值。我只想测试一下

我还(在另一个上下文中)希望能够获得不相同的一(仍然只是关于路径属性),因此也将非常感谢您的帮助。但这是一个不同的问题,我仍然需要上面的Linq查询


有什么想法吗?

我想用
替换
包含的
。任何(
适当的条件
。比如:

if (_mapdocCopy.Descendants("file").All(
        x => _mapdoc.Descendants("file").Any(y => y.path == x.path)))
... = _mapdocCopy.Descendants("file").Except(
        _mapdoc.Descendants("file"),
        (x, y) => x.path == y.path)
编辑:广告第二部分,暴力手段是:

... = _mapdocCopy.Descendants("file").Where(
        x => !_mapdoc.Descendants("file").Any(y => y.path == x.path)))
(以另一个集合中不存在的闭包为例——注意闭包是否定的)。然而,除linq方法外,还有其他方法。我不确定我是否有正确的语法,但可能是这样的:

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

(除非我不确定闭包是否会转换为IEqualityComparer或需要一些额外的黑客操作)

谢谢,您还知道我的第二个问题的答案吗?获取不相同的值集?非常感谢!太好了。