2015-07-28 6 views
0

У меня есть структура данных, как показано ниже. Как я могу получить детей детей, соответствующих критериям?Lambda Statement, который выбирает все дочерние элементы, которые соответствуют критериям

У меня есть список Взрослых, которые содержат список детей.

  • AdultJoe
    • ChildJoe Возраст 12
    • ChildJane Возраст 10
  • AdultFrancis
    • ChildTom Возраст 12
    • ChildTony Возраст 10

Используя приведенную выше структуру данных, как мне получить весь ребенок в возрасте 12 лет?

Это то, что я пробовал, и это не то, что мне нужно.

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

не фильтрует существующий список, но возвращает новый с подмножеством – Plutonix

+0

Извините, я пропустил что-то в своем заявлении по лямбда. Я добавил adult.children.any ..... – Tyddlywink

ответ

4

К "придавить" IEnumerable из IEnumerables, использование 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 
+0

спасибо. Это именно то, что я искал. Добавленный оператор Linq был приятным дополнением. Спасибо. – Tyddlywink

2

Вы не описать классы, но предполагая, что у взрослых есть имущество Children, вы можете использовать примерно следующее:

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

SelectMany дает вам список всех детей всех взрослых и тех фильтров, которые перечислены 12-летним детям.

+0

Да, что сказал Джерри (пропустил его на 30 секунд!). – Mark

+0

Пожелать моему вопросу могло бы быть 2 ответа. Спасибо за ответ. – Tyddlywink

Смежные вопросы