Мне структурировали бизнес-объект как это:
Страна имеет состояния, состояние имеет Города
Так Country[2].States[7].Cities[5].Name
был бы New York
Хорошо, я должен получить список всех объектов Страны, которые имеют по крайней мере 1 City.IsNice == true
Как я получаю это?
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));
var result = (from country in db.Countries
from state in country.States
from city in state.Cities
where city.IsNice
select county).Distinct();
var result = Countries
.SelectMany(a => a.States)
.SelectMany(b => b.Cities)
.Where(b => b.IsNice == true)
.ToList();
Я бы сделал это одним из двух способов:
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);