LINQ – 集合内的filter集合

假设我有以下课程:

class Parent { bool Gender { get; set; } List Children { get; set; } } class Child { bool Gender { get; set; } List GrandChildren { get; set; } } class GrandChild { bool Gender { get; set; } } 

使用linq,任何人都可以通过返回List来帮助我过滤Parent对象,其中每个Child具有Gender == false并且每个Child的GrandChild具有Gender == false

我已经设法返回List但我确实需要维护层次结构。

你的问题有点模糊。 这是一个重建儿童和孙子名单的解决方案,我不确定我是否需要这个孩子.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() }) 

您正在寻找

 .Where(p => p.Children.All(c => !c.Gender && c.GrandChildren.All(g => !g.Gender)) 
  • 帮我过滤一个Parent对象
  • 通过返回List
  • 每个孩子的性别==假
  • 每个孩子的GrandChild都有性别==假?

字面翻译:

 List results = ( from c in theParent.Children where !c.Gender where c.GrandChildren.Any(gc => !gc.Gender) select c ).ToList() 

根据您的意见,您真正想要的是:

 List result = ( from p in Parents where !p.Gender select new Parent() { Gender = p.Gender, Children = ( from c in p.Children where !c.Gender select new Child() { Gender = c.Gender, GrandChildren = ( from gc in c.GrandChildren where !gc.Gender select new GrandChild() { Gender = gc.Gender } ).ToList() } ).ToList() }).ToList(); 
 var filteredParents = from p in parents where p.Children.All(child => !child.Gender && child.GrandChildren.All(grandChild => !grandChild.Gender)) select p; 

在此处使用All方法可确保作为参数传递给该方法的谓词对于给定序列中的所有元素都是true。

给出具有All子项的每个父项的代码检查( Gender = false并且还具有All子项Gender = false )。