C # linq в словаре <> - PullRequest
       14

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

20 голосов
/ 31 марта 2010

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

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

Ian

Ответы [ 2 ]

23 голосов
/ 31 марта 2010

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

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

Хитрость в этом заключается в операции SelectMany. Эффект сводит коллекцию List<Student> в одну коллекцию Student. Результирующий список такой же, как если бы вы выстроили каждый список спереди назад.

19 голосов
/ 31 марта 2010

Вы можете использовать вложенное предложение 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...