2012-03-31 5 views
1

У меня есть список под названием «Страны», и в каждой стране есть список городов, которые в свою очередь имеют список улиц. А на улице есть несколько домов. Списки в списках внутри списков. Очень просто.Список в списках в списках

Мне нужно создать список домов, которые расположены в странах, названия которых начинаются с буквы «А». Не очень логичный пример, но его легче объяснить, чем более сложная структура, с которой я имею дело.

Это, конечно, не слишком сложно и может быть сделано путем создания списка, а затем для всех стран. Где (Name.StartsWith («A»)), затем «Захватить все города» и, наконец, добавить каждую улицу в эту город к списку.

Я не люблю этот метод, так что я хочу что-то похорошела ...

Может ли это быть сделано с помощью что-то вроде агрегата на (список Countries.Where)? Если да, то как? (Таким образом, в одном отчете.)

Да, выбор будет только в верхнем списке, так что это должно облегчить его.

ответ

2

Это похоже на работу для Enumerable.SelectMany (что позволяет разгруппировать один уровень иерархии):

List<County> countyList = GetCounties(); 

IEnumerable<County> aCounties = countyList 
    .Where(c => c.Name.StartsWith("A")); 

List<House> aCountyHouses = aCounties 
    .SelectMany(c => c.Towns) 
    .SelectMany(t => t.Streets) 
    .SelectMany(s => s.Houses) 
    .ToList(); 
Смежные вопросы