用Linq将成绩按不同分数段进行分组

时间:2015-01-31 21:53:54   收藏:0   阅读:196

需求:

       评教系统中有一个模块是对教师的成绩进行图表分析。其中一个具体的需求是:

       对一个学院所有教师的总成绩进行统计分析,显示不同分数段(0~59,60~69,70~79,80~89,90~100)各占多少人,从而直观地展现整个学院教师受学生欢迎程度。

问题:

       我通过底层方法,返回一个集合,这个集合中每个实体包括教师姓名,总成绩等属性。

       说到分组,首先想到了GroupBy,但是查看帮助文档,不能达到我的目的。

       最后,终于形成了以下的Linq语句。在LinqPad中执行一下。

解决:

from s in EvaluationAssessScoreEntities
orderby s.Score descending//按成绩降序排列
let temp1 = (s.Score) / 10 //把所有成绩转化成10以内的数
let temp2 = temp1 - 5.999  //再把成绩分成两份,一份为小于等于5.999的负数,一份大于5.99的正数
let temp3 = Math.Max(temp2, 0)//把上述成绩中的负数转化成0,正数不变0-1/1-2/2-3/3-4/4-5
let temp4 = (int)(69 - temp3)//通过取整方式0变成69,0-1的变成68,1-2的变成67,2-3的对应66,3-4的对应65,4-5的对应64
group s by temp4 into g //更具以上5个数分组
orderby g.Key descending 
select g
//select new { Name = g.Key, Y = g.Count() }

效果图:

                         技术分享

                                                 技术分享




评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!