我需要使用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
});
所以第二部分会产生设计错误
答案 0 :(得分:0)
第一个查询的等效方法语法为
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 }) })