在方法语法C#中选择-返回匿名对象的集合

时间:2019-05-24 08:30:31

标签: c# linq methods group-by

我需要使用Select运算符以linq方法语法对数据进行整形以返回具有Name和Age属性的匿名对象的集合。我知道如何编写查询语法来实现此目的,但不能做到这一点方法语法

请参见2个代码段,第一个工作正常,第二个得到错误指示 严重性代码说明项目文件行抑制状态 “错误CS1061'IGrouping'不包含'StudentName'的定义,并且找不到可以接受的扩展方法'StudentName'接受类型为'IGrouping'的第一个参数(您是否缺少using指令或程序集引用?)” / p>

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
   });

所以第二部分会产生设计错误

1 个答案:

答案 0 :(得分:0)

第一个查询的等效方法语法为

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

但是,这不会选择StudentNameAge属性,而是整个学生对象。

如果您的学生具有StudentNameAge属性,并且您想按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 }) })