【发布时间】:2019-12-06 14:38:25
【问题描述】:
我有收藏,其中有其他收藏。我需要一些优雅的解决方案来解决以下问题:
我需要过滤第一个集合,因为它是内部集合。因此,在第一个集合中将仅保留具有嵌套集合的对象,这些对象回答了一些过滤器。接下来,我希望在过滤的第一个对象中具有由相同过滤器过滤的内部集合。
检查一级过滤:
collectionOne = collectionOne.Where(a => a.collectionTwo.Any(g => !string.IsNullOrEmpty(g.Value) && g.Value.Contains(stringValue)));
这样我将过滤第一个集合,但内部的仍然不会被过滤。我想为第一个对象中的每个对象使用相同的过滤器来过滤内部集合:) 我可以通过一些循环来做到这一点(在第一个过滤器之后),但也许有更好的方法?
可能的解决方案:
foreach(var item in collectionOne)
{
item.collectionTwo = ... same filter
}
附:我问这个的原因是因为还有一个关于过滤器本身的开关盒。所以我将不得不使用不同的过滤器复制粘贴解决方案几次。 这就是为什么我不喜欢循环。
其他解决方案是创建将在 .Where 子句中重复使用的 Func,但这也不是有效的,因为每个过滤器都很简单。
【问题讨论】:
-
Check this SO topic 或者您也可以尝试创建扩展方法。第一个选项将需要创建列表的其他副本,也许是重新创建它。如果它始终是 2 级列表,我真的会在循环中进行过滤。保持简单。
标签: c# linq filter collections