尝试过滤使用LINQ的集合,其中集合也具有可为空的属性的集合
好吧,这对我来说是一个相当有趣的问题,所以我会尽我所能去努力以一种你能理解的方式来问这个问题。尝试过滤使用LINQ的集合,其中集合也具有可为空的属性的集合
因此,我有一个对象集合,其中包含一个对象集合,其中包含一个对象集合,其中有一个属性有时可以为null。
它看起来是这样的伪代码:
Class ObjectA {
public IEnumberable<ObjectB>
}
Class ObjectB {
public IEnumberable<ObjectC>
}
Class ObjectC {
property? a;
}
好了,现在我基本上需要过滤掉所有ObjectC的其中属性= 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 == null
或collectionC == null
。
编辑: 什么我真的想做到的是,如果一些c.Property =“x”和一些c.Property =“Y”和一些c.Property = NULL,我想从我的collection
什么地方删除c.Property ='x',但留下剩下的。
collection.Where(a=>a.collectionB.Any(b=> b.collectionC == null ||
b.collectionC.Any(c=>c.Property == null || filters.Contains(c.Property))))
这几乎就是解决方案。将最后一部分更改为c => c.Property == null &&!filters.Contains(c.property),这是为我解决的问题。 – Allen
很高兴帮助,我没有清楚地知道应该是什么情况 –
你确定你的意思是'好吧,现在我基本上需要过滤掉所有的ObjectC,其中property = someValue或者它不是null'任何等于“somevalue”的东西都必须是nonNull。所以这相当于所有具有非null属性值的ClassC。 –
编辑我的问题澄清 – Allen