Вы ищете вложенное SelectMany
.
SelectMany
вернет один IEnumerable<T>
из множества "внутренних" Ienumerable<T>
- поэтому Zoo.SelectMany(a => a.AreaList)
вернет один IEnumerable<Area>
, содержащий все IEnumerable<Area>
из свойства Area
- тогда вы делаете это еще раз для List<Animal>
в классе Area
:
Пример данных:
var zoo = new Zoo() {
AreaList = new List<Area>()
{
new Area()
{
AnimalList = new List<Animal>()
{
new Animal() {Id = new List<int>() {1, 2, 3}},
new Animal() {Id = new List<int>() {4, 5, 6}}
}
},
new Area()
{
AnimalList = new List<Animal>()
{
new Animal() {Id = new List<int>() {7, 8, 9}},
new Animal() {Id = new List<int>() {10, 11}}
}
},
}
};
Запрос Linq:
var max = zoo.AreaList.SelectMany(a => a.AnimalList).SelectMany(a => a.Id).Max();
Console.WriteLine(max);
Результат: 11
В синтаксисе запроса вы можете сделать SelectMany
, связав предложения from
, как показано в ответе gxp. (Лично я предпочитаю синтаксис цепочки методов, поэтому мне потребовалось некоторое время, чтобы разобраться в этом ...)