Подтвердить что ты не робот

С# linq в словаре <>

У меня есть объект allStudents = Dictionary<ClassRoom, List<Student>>()

В Linq, как мне получить список всех студентов, которые являются мужчинами? (student.Gender == "m" ) из всех классов?

Ян

4b9b3361

Ответ 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.