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