Lambda语句,用于选择符合条件的所有子项

时间:2015-07-28 21:25:30

标签: vb.net lambda

我有一个如下所列的数据结构。如何让孩子的孩子符合标准?

我有一份包含儿童名单的成人名单。

  • AdultJoe
    • ChildJoe 12岁
    • ChildJane 10岁
  • AdultFrancis
    • ChildTom 12岁
    • ChildTony 10岁

使用上述数据结构,我如何获得所有12岁的孩子?

这就是我尝试过的,而不是我需要的东西。

Adults.Where(Function(adult) adult.Children.Any(Function(child) child.age= 12))

2 个答案:

答案 0 :(得分:4)

要“压平”IEnumerable的IEnumebles,请使用SelectMany:

Dim children = Adults.SelectMany(Function(a) a.Children).Where(Function(c) c.Age = 12)

这在LINQ语法中是隐含的:

Dim children = from adult in Adults
               from child in adult.Children
               where child.Age = 12
               select child

答案 1 :(得分:2)

您没有描述您的课程,但假设成年人有Children属性,您可以使用以下内容:

Dim twelveYearOlds = adults.SelectMany(
    Function(adult) adult.Children
).Where(
    Function(child) child.Age = 12
)

SelectMany为您提供了所有成年人的所有孩子以及列入12岁儿童的过滤器的列表。