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

需求:

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

对一个学院所有教师的总成绩进行统计分析,显示不同分数段(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() }

效果图:

时间: 2024-08-10 14:57:46

用Linq将成绩按不同分数段进行分组的相关文章

c语言:要求按照考试成绩的等级输出百分制分数段,成绩的等级由键盘输入。

要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为60分以下.成绩的等级由键盘输入. 解:程序: #include<stdio.h> int main() { char grade; printf("请输入一个成绩等级:"); scanf("%c",&grade); printf("你的分数段为:"); switch (grade) { case 'A':printf(&q

【c语言】要求按照考试成绩的等级输出百分制分数段

// 要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分, // C等为60~69分,D等为60分以下.成绩的等级由键盘输入 #include <stdio.h> int main() { char ch; printf("请输入成绩的等级:"); scanf("%c",&ch); switch(ch) { case 'A': printf("分数段是:85分以上\n"); break; case '

统计列出矩阵类型各分数段人数

SQL查询 统计列出矩阵类型各分数段人数,横轴为分数段[100-85].[85-70].[70-60].[<60],纵轴为课程号.课程名称(提示使用case when句式) SELECT SC.COURSE_NO, C.COURSE_NAME, SUM(CASE WHEN SC.CORE BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS "[100-85]", SUM(CASE WHEN SC.CORE BETWEEN 70 AND 85 THEN

Excel-统计各分数段人数 frequency()

FREQUENCY函数 函数名称:FREQUENCY 主要功能:以一列垂直数组返回某个区域中数据的频率分布. 使用格式:FREQUENCY(data_array,bins_array) 参数说明:Data_array表示用来计算频率的一组数据或单元格区域:Bins_array表示为前面数组进行分隔一列数值. 应用举例:如图2所示,同时选中B32至B36单元格区域,输入公式:=FREQUENCY(B2:B31,D2:D36),输入完成后按下“Ctrl+Shift+Enter”组合键进行确认,即可求

C# 使用Dictionary、linq实现根据集合里面的字符串进行分组

分组两种方法: List<string> list = new List<string>() { "1_32", "2_10", "1_8", "1_25", "2_3", "3_5", "5_15", "3_16" }; //对上面集合里面的字符串按照“_”进行分组. #region //使用字典,键值对集合保存分组数据.

帧、报文、报文段、分组、包、数据报的概念区别

分组.包,packet,信息在互联网当中传输的单元,网络层实现分组交付.用抓包工具抓到的一条条记录就是包. 帧,frame,数据链路层的协议数据单元.我们将链路层分组称为帧. 数据报,Datagram,通过网络传输的数据的基本单元,包含一个报头(header)和数据本身,其中报头描述了数据的目的地以及和其它数据之间的关系.可以理解为传输数据的分组.我们将通过网络传输的数据的基本单元称为数据报. 报文段,segment,组成报文的每个分组.我们将运输层分组称为报文段. 报文,message,一般指

c# Linq及Lamda表达式应用经验之 GroupBy 分组

本文转载自:http://www.cnblogs.com/han1982/p/4138163.html 示例1: GroupBy 分组在List<>泛型中的应用 原表: 按姓名Name 分组后结果: 对DATATABLE 进行LAMDA查询时必须在项目的引用中添加 System.Data.DataSetExtensions 代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } List

(转)c# Linq及Lamda表达式应用经验之 GroupBy 分组

本文转载自:http://www.cnblogs.com/han1982/p/4138163.html 示例1: GroupBy 分组在List<>泛型中的应用 原表: 按姓名Nam 分组后结果: 对DATATABLE 进行LAMDA查询时必须在项目的引用中添加 System.Data.DataSetExtensions 代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } List&

c# Linq及Lambda表达式应用经验之 GroupBy 分组 count ,排序

引用:http://www.cnblogs.com/han1982/p/4138163.html 示例1: GroupBy 分组在List<>泛型中的应用 原表: 按姓名Nam 分组后结果: 对DATATABLE 进行LAMDA查询时必须在项目的引用中添加 System.Data.DataSetExtensions public partial class Form1 : Form { public Form1() { InitializeComponent(); } List<Pers