c# linq-получить элементы из массива, которые не существуют в другом массиве

У меня есть два массива idxListResponse & _index, оба из которых имеют одинаковую структуру.

каждый из этих массивов содержит ряд элементов с различными свойствами, один из которых является дочерним массивом indexdata

каждый элемент этого массива имеет ряд свойств, одним из которых является другой массив называется свойство datafield. Имеет ряд свойств пары key value.

таким образом, по сути, у меня есть иерархия из 3 отдельных массивов.

Я глядя, чтобы получить первый уровень иерархии + все элементы 2-го уровня, где элементы 3-го уровня не совпадают, т. е. исключить только те элементы из 2-го уровня, где элементы 3-го уровня совпадают.

Я пытался подойти к этому по-разному, но до сих пор я никуда не добираюсь, может кто-нибудь помочь.

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 ответов


Except - это хороший способ сделать это:

var items = source1.Except(source2);

вернет все элементы source1 за исключением те source2.

поскольку ваши коллекции, по-видимому, разные типы, вы бы сделали что-то вроде:

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

или вы можете создать свою собственную реализацию IEqualityComparer и используйте это для сравнения двух разных типов.