C# LINQ - 从一个数组中获取在另一个数组中不存在的元素

14
我有两个数组idxListResponse和_index,它们具有相同的结构。每个数组都包含许多具有不同属性的元素,其中之一是一个名为indexdata的子数组。该数组的每个元素都有许多属性,其中之一是另一个名为datafield的数组。这个数组有许多键值对属性。因此,我实际上有三个单独的层次结构数组。我希望获取层次结构的第一级以及所有第二级元素,其中第三级项目不匹配,即仅从第二级中排除那些第三级项目匹配的项目。我已经尝试了许多不同的方法,但到目前为止还没有进展,有人可以帮忙吗?FYI-这是我最新的尝试。
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个回答

44

Except 是一个很好的实现方法:


var items = source1.Except(source2);

返回所有source1中的项目,除了source2中的项目。

由于您的集合似乎是不同类型的,您可以这样做:

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

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


谢谢,但是我就是无法让它工作。问题在于,如果第三个数组中一个元素的属性之一匹配,则似乎会被删除。在删除之前,我需要每个第三个数组中的元素的所有属性都与相应条目匹配。 - Johnv2020

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接