说我有以下课程:
class Parent
{
string Name { get; set; }
List<Child> { get; set; }
}
class Child
{
string Name { get; set; }
List<GrandChild> { get; set; }
}
class GrandChild
{
string Name { get; set; }
}
我有一个对象列表,如下所示:
// Parent list with children objects that all, also have grand children objects.
List<Parent> parent = new List<Parent>();
现在,我想要一个Child对象,其中其GrandChild对象的名称之一是“ John”。
由于我不知道如何从已过滤的父对象中返回子对象,因此如何使用LINQ来获取它?
(我可以使用foreach循环来获取对象,但这不是LINQ在那里的原因,以缩短代码,还是LINQ无法做到这一点?)
谢谢。
答案 0 :(得分:3)
您可以使用SelectMany
将Child集合展平为一个集合,然后过滤它们:
parent
.SelectMany(p => p.Children)
.Where(c => c.GrandChildren
.Any(g => g.Name == "John"))
答案 1 :(得分:1)
如果您希望使用Linq查询语法进行查询,则可以使用以下方式:
from parent in parents
from child in parent.Children
where (
from grandChild in child.Grandchildren
where grandChild.Name == "John"
select grandChild
).Any()
select child;
您更喜欢这种口味。