У меня есть объект allStudents = Dictionary<ClassRoom, List<Student>>()
В Linq, как я получил бы список всех студентов, которые являются штекером? (студент. Пол == "m") из всех Классов?
Ian
Попробуйте следующее
var maleStudents = allStudents
.SelectMany(x => x.Values)
.Where(x => x.Gender=="m");
Хитрость заключается в операции SelectMany
. Она позволяет сгладить коллекцию List
в одну коллекцию Student
. Получившийся список будет таким же, как если бы вы выстроили каждый список спереди назад.
Вы можете использовать вложенные from
. Первый from
выбирает все классы вместе с их студентами (элемент из словаря), который представлен как KeyValuePair
. Затем можно выбрать всех студентов из класса с помощью свойства Value
и отфильтровать их:
var q = from cls in allStudents
from s in cls.Value
where s.Gender == "M" select s;
Под обложкой вложенный пункт from
транслируется в вызов метода SelectMany
.