Хорошо, это была довольно интересная проблема для меня, поэтому я постараюсь сделать все возможное, чтобы спросите об этом таким образом, чтобы вы могли понять.Попытка фильтровать коллекцию с использованием LINQ, где коллекция имеет коллекцию, которая также имеет коллекцию с свойством, которое является нулевым
Итак, у меня есть коллекция объектов, которая содержит коллекцию объектов, которая содержит коллекцию объектов, которая имеет свойство, которое иногда может быть нулевым.
Это выглядит как этот псевдокод:
Class ObjectA {
public IEnumberable<ObjectB>
}
Class ObjectB {
public IEnumberable<ObjectC>
}
Class ObjectC {
property? a;
}
Хорошо, теперь я в принципе нужно отфильтровать все ObjectC, где свойство = SomeValue или свойство равно нулю.
Я попытался это: (помните, что это всего лишь пример, а не реальный код)
IEnumberable<ClassA> collection;
List<string> filters; // This contains a list of filters
collection = collection.Where(a => a.collectionB.All(b =>
b.collectionC.Where(c => !filter
.Contains(c.Property))?
.Count() == 0))
.ToList();
Таким образом, проблема заключается в том, что если я сопрягать фильтр к c.Property
ничего не происходит. Он должен удалить тот из collection
, но это не так. Мне также не нужно отфильтровывать какие-либо из них, где c.Property == null
или collectionC == null
.
EDIT: То, что я на самом деле пытаетесь достичь, если некоторые c.Property = «х» и некоторые c.Property = «у» и некоторые c.Property = NULL, я хочу, чтобы удалить из моего collection
что-нибудь где c.Property = 'x', но остальное.
Вы действительно действительно имеете в виду «Хорошо, теперь мне в основном нужно отфильтровать все объекты ObjectC, где свойство = someValue ИЛИ это не пусто» ?? Все, что равно 'somevalue', должно быть неNull. Итак, это будет эквивалентно всем ClassC с ненулевыми значениями свойства. –
Отредактировал мой вопрос для разъяснения – Allen