c#linq - 从数组中获取不存在于不同数组中的元素

时间:2012-01-23 17:32:14

标签: c# linq

我有两个数组idxListResponse& _index两者具有相同的结构。

这些数组中的每一个都包含许多具有不同属性的元素,其中一个是名为indexdata的子数组

此数组的每个元素都有许多属性,其中一个属性是另一个名为datafield的数组。这有许多键值对属性。

所以本质上我有3个独立数组的层次结构。

我希望获得层次结构的第一级+第3级项目不匹配的第二级别的所有元素,即仅排除第3级项目匹配的第2级别的项目。

我尝试过多种不同的方式,但到目前为止,我没有任何进展,任何人都可以提供帮助。

仅供参考 - 这是我的最新尝试

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))
            )
        )
    )
);

1 个答案:

答案 0 :(得分:26)

Except是一种很好的方法:

var items = source1.Except(source2);

将返回source1 中的所有项目,但 source2中的项目除外。

由于您的馆藏看起来是不同的类型,您可以执行以下操作:

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

或者您可以创建自己的IEqualityComparer实现,并使用它来比较两种不同的类型。