在LINQ中使用Group By时如何结合Order By并设置列别名
LINQ查询:如何对结果排序并自定义列标题?
问题描述
我编写了一段LINQ查询,用于统计每位教职工指导的学生总数,查询代码如下:
int count; int key; var myQuery = from s in Students join f in Faculties on s.FID equals f.FID group f by f.FLast + ' ' + f.FFirst into grp select new {key = grp.Key, count = grp.Count()}; myQuery.Dump();
当前查询输出结果正确:
Brown Jonnel 1 Zhulin Mark 1 Marx Teresa 3 Langley Colin 1
但我希望实现两个需求:一是按教职工姓名对结果排序,二是为列标题设置别名,请问如何在LINQ中实现?
解决方案
没问题,这两个需求在LINQ里都能轻松实现,我来给你拆解说明:
1. 为列标题设置别名
你现在匿名类里的key和count就是输出的列名,直接把它们替换成你想要的别名即可。比如把key改成FacultyName,count改成StudentCount,这样输出的列标题就会变成自定义的名称。
2. 按教职工姓名排序
在分组后的查询末尾添加orderby子句,指定按分组键(也就是教职工的全名grp.Key)排序就行。如果需要降序排序,可以用orderby grp.Key descending。
修改后的完整代码
var myQuery = from s in Students join f in Faculties on s.FID equals f.FID group f by f.FLast + ' ' + f.FFirst into grp orderby grp.Key // 按教职工姓名升序排序 select new { FacultyName = grp.Key, StudentCount = grp.Count() }; // 自定义列别名 myQuery.Dump();
输出结果示例
修改后你会得到排序后的结果,且列标题是自定义的:
FacultyName StudentCount Brown Jonnel 1 Langley Colin 1 Marx Teresa 3 Zhulin Mark 1
内容的提问来源于stack exchange,提问作者Brandon Tupiti
相关产品推荐
相关产品推荐

