首页 > 解决方案 > 在父集合中过滤子集合

问题描述

使用 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.

标签: c#linq

解决方案


尝试这个:

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对象的新实例。您可能不想修改查询中的原始实例。


推荐阅读