尝试使用LINQ过滤集合,其中集合具有集合,该集合还具有可以为空的属性的集合

时间:2016-08-02 20:10:40

标签: c# linq

好的,这对我来说是一个非常有趣的问题,所以我会尽力以你能理解的方式问这个问题。

所以,我有一个对象集合,其中包含一组对象,这些对象包含一组对象,这些对象的属性有时可以为null。

它看起来像这个伪代码:

Class ObjectA { 
public IEnumberable<ObjectB>
}
Class ObjectB {
public IEnumberable<ObjectC>
}
Class ObjectC {
property? a;
}

好的,现在我基本上需要过滤掉所有的ObjectC,其中property = someValue或属性为null。

我试过这个:(记住,这只是一个例子,不是真正的代码)

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 == nullcollectionC == null中的任何一个。

编辑: 我真正想要实现的是一些c.Property =&#39; x&#39;还有一些c.Property =&#39; y&#39;还有一些c.Property = null,我想从我的collection中删除c.Property =&#39; x&#39;剩下的就剩下了。

1 个答案:

答案 0 :(得分:1)

collection.Where(a=>a.collectionB.Any(b=> b.collectionC == null ||
   b.collectionC.Any(c=>c.Property == null || filters.Contains(c.Property))))