Выбрать в методе Синтаксис C # - возвращает коллекцию анонимного объекта - PullRequest
0 голосов
/ 24 мая 2019

Мне нужно использовать оператор Select, чтобы сформировать данные в синтаксисе метода linq для возврата коллекции анонимного объекта со свойством Name и Age. Я знаю, как написать синтаксис запроса для достижения этой цели, но не в состоянии сделать это с синтаксис метода

См. 2 фрагмента кода, первый работает нормально, второй получает ошибку, указывающую Код серьезности Описание Состояние подавления строки файла проекта «Ошибка CS1061« IGrouping »не содержит определения« StudentName », и невозможно найти доступный метод расширения« StudentName », принимающий первый аргумент типа« IGrouping »(вы пропустили директиву using или ссылку на сборку?)»

var studentsGroupByStandard = from s in ObjectsMisc.studentList
                                          group s by s.StandardID into sg
                                          orderby sg.Key
                                          select new { sg.Key, sg };
var testS = ObjectsMisc
  .studentList
  .GroupBy(sg => sg.StandardID)
  .OrderBy(sg => sg.Key).Select(sg => new {
     Name = sg.StudentName,
     Age = s.Age
   });

так что 2-й кусок генерирует ошибку проектирования

1 Ответ

0 голосов
/ 24 мая 2019

Эквивалентный синтаксис метода для вашего первого запроса будет

var testS = ObjectsMisc.studentList
    .GroupBy(s => s.StandardID)
    .OrderBy(sg => sg.Key)
    .Select(sg => new { sg.Key, sg})

Однако при этом выбираются не свойства StudentName и Age, а целые объекты ученика.

Если у ваших учеников есть свойства StudentName и Age, и вы хотите выбрать их, сгруппированные по StandardId, это будет следующий синтаксис метода

var testS = ObjectsMisc.studentList
    .GroupBy(s => s.StandardID)
    .OrderBy(sg => sg.Key)
    .Select(sg => new { sg.Key, Students = sg.Select(s => new { s.StudentName, s.Age }) })
...