c# - 如何使用相同的过滤器同时过滤集合及其嵌套集合?
问题描述
我有收藏,其中有其他收藏。我需要一些优雅的解决方案来解决以下问题:
我需要过滤第一个集合,它是内部集合。因此,在第一个集合中将仅保留具有嵌套集合的对象,这些对象回答了一些过滤器。接下来,我希望在过滤的第一个对象中具有由相同过滤器过滤的内部集合。
检查一级过滤:
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
}
PS我问这个的原因是因为还有一个关于过滤器本身的开关盒。所以我将不得不使用不同的过滤器复制粘贴解决方案几次。这就是为什么我不喜欢循环。
其他解决方案是创建将在 .Where 子句中重复使用的 Func,但这也不是有效的,因为每个过滤器都很简单。
解决方案
如果理解正确,您正在寻找的是:
collectionOne = collectionOne
.Where(filter)
.Select(item =>
{
item.collectionTwo = collectionTwo.Where(filter);
return item;
});
而且,如果您只想选择而不是修改项目:
collectionOne = collectionOne
.Where(filter)
.Select(item =>
new X{
collectionTwo = collectionTwo.Where(filter),
// copy all other fields
});
推荐阅读
- java - 为什么 jvm 命令 `jinfo` 在 alpine openjdk8 发行版中没有`-flags`?
- python - 盒子宽度翻倍
- git - 从覆盖分支上未提交文件的 master 恢复合并
- java - Java ThreadPoolExecutor:动态更新核心池大小间歇性拒绝传入任务
- android - 获取能够处理照片上传意图的应用程序列表以显示在视图中(底部工作表视图、对话框、对话框片段)
- c# - 我们是否能够从应用程序在 Linux Ubuntu for windows 中安装 Microsoft Visual Studio(不是 Visual Studio 代码)?
- python - 如何查看用于保存类/实例/属性的字典?
- sql - Oracle 如何在不使用组的情况下获取单个值
- reactjs - 如何使用 reactjs 在功能组件中编写注销功能?
- google-sheets-api - 从 2020 年 4 月 9 日起,我可以在 v3 API 中列出用户的电子表格吗?