LINQ - 集合内的过滤器集合

ped*_*bsa 5 c# linq

假设我有以下课程:

class Parent
{
    bool Gender { get; set; }
    List<Child> Children { get; set; }
}


class Child
{
    bool Gender { get; set; }
    List<Child> GrandChildren { get; set; }
}


class GrandChild
{
    bool Gender { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用linq,任何人都可以通过返回List<Child>每个Child拥有的位置Gender == false以及每个Child的GrandChild 来帮助我过滤Parent对象Gender == false吗?

我设法返回了一个,List<GrandChild>但我真的需要维护层次结构.

SLa*_*aks 13

您正在寻找

.Where(p => p.Children.All(c => !c.Gender && c.GrandChildren.All(g => !g.Gender))
Run Code Online (Sandbox Code Playgroud)


fej*_*oco 6

你的问题有点模糊.这是一个重建孩子和孙子列表的解决方案,我不确定我是否需要孩子.GrandChildren.All(gc =>!gc.Gender)所以为了清楚起见我把它留了下来:

parents.Select(parent => new Parent
{
  Gender = parent.Gender,
  Children = parent.Children.Where(child => !child.Gender).Select(child => new Child
    {
      Gender = false,
      GrandChildren = child.GrandChildren.Where(gc => !gc.Gender).ToList()
    }
  ).ToList()
})
Run Code Online (Sandbox Code Playgroud)