评教系统中有一个模块是对教师的成绩进行图表分析。其中一个具体的需求是:
对一个学院所有教师的总成绩进行统计分析,显示不同分数段(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() }
原文地址:http://blog.csdn.net/u010924834/article/details/43346557