C# LINQ - 根据另一个列表中的子属性返回类型化过滤列表

asd*_*3ea 3 .net c# linq

给定对象:

class Parent
{
    private int id;

    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    private List<Child> childrenList;

    public List<Child> ChildrenList
    {
        get { return childrenList; }
        set { childrenList = value; }
    }
}

class Child
{
    private int idSub;

    public int IdSub
    {
        get { return idSub; }
        set { idSub = value; }
    }

    private bool isST;

    public bool IsST
    {
        get { return isST; }
        set { isST = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个List<Parent> parentList = new List<Parent>()内部对象,其中有一个名为 ChildrenList 的Parent列表。Child

Child有一个属性IsST

我只想返回Child属性IsST等于 true 的 ,如果Parent不满足条件,则不需要返回。

返回的两个列表都需要输入其各自的类型。

到目前为止我所拥有的:

List<Parent> parentList = new List<Parent>()
{
    new Parent()
    {
        Id = 1,
        ChildrenList = new List<Child>()
        {
           new Child()
           {
               IdSub = 1,
               IsST = true
           },
           new Child()
           {
               IdSub = 2,
               IsST = true
           }
        }
    },
     new Parent()
    {
        Id = 2,
        ChildrenList = new List<Child>()
        {
           new Child()
           {
               IdSub = 3,
               IsST = false
           },
           new Child()
           {
               IdSub = 4,
               IsST = true
           }
        }
    },
     new Parent()
    {
        Id = 3,
        ChildrenList = new List<Child>()
        {
           new Child()
           {
               IdSub = 5,
               IsST = false
           },
           new Child()
           {
               IdSub = 6,
               IsST = false
           }
        }
    }
};


var parentFilteredList = parentList
            .Select(c => c.ChildrenList
                            .Where(d => d.IsST)
                            .ToList())
            .ToList();
Run Code Online (Sandbox Code Playgroud)

但其中的父母名单parentFilteredList不是类型List<Parent>

目前结果

我需要它是List<Parent>因为Parent实际情况中的对象有很多属性,以及Child. Select new这不是一个选择。

有什么帮助吗?

Zoh*_*led 6

如果您希望返回至少一个孩子的 ST 为真的所有父母 -

var parentFilteredList = parentList
     .Where(c => c.ChildrenList.Any(d => d.IsST))
     .ToList();
Run Code Online (Sandbox Code Playgroud)

或者,如果您还想过滤这些父母中的孩子列表 -

var parentFilteredList = parentList
     .Where(c => c.ChildrenList.Any(d => d.IsST))
     .Select(c => 
         {
             c.ChildrenList = c.ChildrenList.Where(d => d.IsST).ToList();
             return c;
         }).ToList();
Run Code Online (Sandbox Code Playgroud)

请注意,这会影响你的原生父母 - 我不确定这是一个理想的结果。