Запрос LINQ с 3 уровнями

Мне структурировали бизнес-объект как это:

Страна имеет состояния, состояние имеет Города

Так Country[2].States[7].Cities[5].Name был бы New York

Хорошо, я должен получить список всех объектов Страны, которые имеют по крайней мере 1 City.IsNice == true

Как я получаю это?

5
задан abatishchev 9 May 2010 в 17:27
поделиться

4 ответа

var selectedCountries =
    countries.Where(
        co => co.States.Any(
            s => s.Cities.Any(
                ci => ci.IsNice)));

Другой вариант:

var selectedCountries =
    countries.Where(
        co => co.States.SelectMany(s => s.Cities).Any(
            ci => ci.IsNice));
3
ответ дан 15 December 2019 в 00:53
поделиться
var result = (from country in db.Countries
             from state in country.States
             from city in state.Cities
             where city.IsNice
             select county).Distinct();
1
ответ дан 15 December 2019 в 00:53
поделиться
var result = Countries
    .SelectMany(a => a.States)
    .SelectMany(b => b.Cities)
    .Where(b => b.IsNice == true)
    .ToList();
0
ответ дан 15 December 2019 в 00:53
поделиться

Я бы сделал это одним из двух способов:

var selectedCountries = from country in countries
                        from state in country.States
                        from city in state.Cities
                        where city.IsNice
                        select country;

или

var selectedCountries =
    countries.Where(country =>
                    country.States.FirstOrDefault(state =>
                                                  state.Cities.FirstOrDefault(city =>
                                                                              city.IsNice) != null) != null);
0
ответ дан 15 December 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: