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

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

В Linq, как я получил бы список всех студентов, которые являются штекером? (студент. Пол == "m") из всех Классов?

Ian

20
задан Dan McClain 31 March 2010 в 11:50
поделиться

2 ответа

Попробуйте следующее

var maleStudents = allStudents
  .SelectMany(x => x.Values)
  .Where(x => x.Gender=="m");

Хитрость заключается в операции SelectMany. Она позволяет сгладить коллекцию List в одну коллекцию Student. Получившийся список будет таким же, как если бы вы выстроили каждый список спереди назад.

23
ответ дан 29 November 2019 в 23:44
поделиться

Вы можете использовать вложенные from. Первый from выбирает все классы вместе с их студентами (элемент из словаря), который представлен как KeyValuePair>. Затем можно выбрать всех студентов из класса с помощью свойства Value и отфильтровать их:

var q = from cls in allStudents
        from s in cls.Value
        where s.Gender == "M" select s;

Под обложкой вложенный пункт from транслируется в вызов метода SelectMany.

19
ответ дан 29 November 2019 в 23:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: