c# - 在父集合中过滤子集合
问题描述
使用 LINQ 是否可以实现以下场景。我有这样的课:
public class MyClass
{
public int Id { get; set; }
public List<MyClass2> MyData { get; set; }
public List<MyClass2> OtherData { get; set; }
}
我有一个列表,我想MyData
根据标准进行过滤;例如(不起作用):
List<MyClass> myData = GetData();
var myDataFiltered = myData
.Where(d => d.Id == 3)
.SelectMany(d => d.Where(m => m.MyData.SomeProperty == somevalue), d);
我希望结果是一个List<MyClass>
,但只包含原始的 MyData 元素,其中SomeProperty == somevalue
.
解决方案
尝试这个:
var myDataFiltered = myData
.Where(d => d.Id == 3)
.Select(x => new MyClass()
{
Id = x.Id,
MyData = x?.MyData.Where(y => y.SomeProperty == somevalue).ToList(),
OtherData = x.OtherData
})
.Where(x => x.MyData != null && x.MyData.Count > 0)
.ToList();
它创建MyClass
仅包含查询MyClass2
对象的新实例。您可能不想修改查询中的原始实例。
推荐阅读
- javascript - 我如何检查谁邀请了谁 Discord.js
- javascript - 显式等待不起作用 NODEJS Selenium
- javascript - 我正在努力使用 if 条件来检查附加数据属性是否在 react.js 代码中具有 Duration 键
- typescript - TsLint/TsConfig:模块“共享”未在 package.json 中列为依赖项
- reactjs - 找不到模块:无法解析“react-linkedin-login-oauth2”
- java - 如何通过组合在另一个对象中编写对象数组以及如何在主类中创建它们?
- python - Google Colaboratory 上的类型错误
- pca - 具有不同第一维的两个矩阵上的 PCA
- c# - ILNumerics 插值工具箱对象到磁盘
- git - Docker 无法在 Ubuntu 容器上安装 git