根据某个分数来计算排名

linq:OrderByDescending 按指定表达式对集合倒序排序;延迟

第一步:查询出学生成绩表中的数据

using (var db = new SMSPModel.SMSPEntities())
            {
                db.CommandTimeout = 0;
                var tb = (from p in db.tbExamMark
                          where p.tbExamCourse.ID == this.DrplstExamCourse1.ExamCourseId
                          && p.RecordStatus == decimal.One
                          && p.tbExamCourse.RecordStatus == decimal.One
                          && p.tbExamCourse.tbExamBasis.ID == this.DrplstExam1.ExamId
                          && p.tbExamCourse.tbCourseBasis.RecordStatus == decimal.One
                          && p.tbExamCourse.tbCourseBasis.tbSubjectBasis.RecordStatus == decimal.One
                          && p.tbExamCourse.tbCourseBasis.tbSubjectBasis.tbAreaBasis.RecordStatus == decimal.One
                          && p.tbStudentBasis.RecordStatus == decimal.One
                          && p.tbStudentBasis.StudentStatus == decimal.One
                          orderby p.tbStudentBasis.StudentCode
                          select new ExamMark
                                 {
                                     StudentId = p.tbStudentBasis.ID,
                                     StudentCode = p.tbStudentBasis.StudentCode,
                                     StudentName = p.tbStudentBasis.StudentName,
                                     ClassName = (from p0 in db.tbClassStudent
                                                  where p0.RecordStatus == decimal.One &&
                                                        p0.tbStudentBasis.ID == p.tbStudentBasis.ID &&
                                                        p0.tbClassBasis.tbYear.FromDate <= p.tbExamCourse.tbExamBasis.tbYear.FromDate &&
                                                        p0.tbClassBasis.tbYear.ToDate >= p.tbExamCourse.tbExamBasis.tbYear.ToDate &&
                                                        p0.tbClassBasis.tbYear.tbYearGroup.GroupNo == decimal.One
                                                  select p0.tbClassBasis.ClassName).FirstOrDefault(),
                                     AppraiseMark = p.AppraiseMark == decimal.MinusOne ? null : (decimal?)p.AppraiseMark,
                                     Mark1 = p.Mark1 == decimal.MinusOne ? null : (decimal?)p.Mark1,
                                     Mark2 = p.Mark2 == decimal.MinusOne ? null : (decimal?)p.Mark2,
                                     TotalMark = p.TotalMark == decimal.MinusOne ? null : (decimal?)p.TotalMark,
                                     TotalGradeRank = p.TotalGradeRank == decimal.MinusOne ? null : (decimal?)p.TotalGradeRank,
                                     SegmentMark = p.SegmentMark == decimal.MinusOne ? null : (decimal?)p.SegmentMark,
                                     SegmentGradeRank = p.SegmentGradeRank == decimal.MinusOne ? null : (decimal?)p.SegmentGradeRank,
                                     LevelName = p.tbExamLevel.LevelName,
                                     GetPoint = p.tbExamLevel.LevelValue > decimal.Zero ? p.tbExamCourse.tbCourseBasis.CoursePoint : decimal.Zero,
                                     StudyPoint = p.tbExamCourse.tbCourseBasis.CoursePoint * (p.tbExamLevel.LevelName == "---" ? decimal.Zero : p.tbExamLevel.LevelValue)
                                 }).Distinct().OrderByDescending(c => c.SegmentMark).ToList();

第二步,根据SegmentMark  综合分 进行排名

 //重新排名(综合分排名)
                var studentScoresRankList = (from p in tb
                                             select new ExamMark
                                             {
                                                 StudentId = p.StudentId,
                                                 StudentCode = p.StudentCode,
                                                 StudentName = p.StudentName,
                                                 ClassName = p.ClassName,
                                                 AppraiseMark = p.AppraiseMark,
                                                 Mark1 = p.Mark1,
                                                 Mark2 = p.Mark2,
                                                 TotalMark = p.TotalMark,
                                                 TotalGradeRank = p.TotalGradeRank,
                                                 SegmentMark = p.SegmentMark,
                                                 LevelName = p.LevelName,
                                                 GetPoint = p.GetPoint,
                                                 StudyPoint = p.StudyPoint,
                                                 SegmentGradeRank = tb.Select(c => c.SegmentMark).ToList().IndexOf(p.SegmentMark) + 1,
                                             }).OrderBy(c => c.TotalGradeRank).ToList();

                return studentScoresRankList;

  然后排名就出来了,然后重新绑定就可以了。

时间: 2024-08-13 14:48:05

根据某个分数来计算排名的相关文章

mysql计算排名

mysql计算排名,获取行号rowno 学生成绩表数据 SELECT * FROM table_score ORDER BY score DESC; 获取某个学生成绩排名并计算该学生和上一名学生成绩差,是并列排名 SELECT *, (SELECT count(DISTINCT score) FROM table_score AS b WHERE a.score<b.score)+1 AS rank, #获取排名,并列 (SELECT b.score FROM table_score AS b

c语言代码编程题汇总:统计学生的分数,计算出低于平均值的人数

统计学生的分数,计算出低于平均值的人数 程序代码如下: 1 /* 2 2017年3月9日11:51:28 3 功能:统计学生的分数,计算出低于平均值的人数 4 */ 5 #include"stdio.h" 6 int main (void) 7 { 8 int i = 0, j; 9 int score; 10 float sum = 0.0, aver = 0.0; 11 int m = 0, k = 0; 12 int a[100]; 13 int b[100]; 14 15 16

JS进行包含分数的计算

要求: //实现计算 222 * (1/2) = 111; //传统parseFloat()在截取1/2对象时,会被截取为1:因此不能满足要求. //解决:拆分分数为分子和分母,然后去分母做除法 var num1 = $("#xxx1").val(); //取到222对象 var num2 = $("#xxx2").val(); //取到1/2对象 num2 = parseInt(num2.split("/")[1]); //取到分母,若分子,则

数组(随机生成一维数组),二维数组的概念和题目设计(利用二维数组 :任意给定分数去计算科目和人均平均分)

1 //数组间的关系arr[]中的数字为几,[]内就有几个数 2 //{ }内的数是从0开始,如需要打印应从0开数 3 如{2,6,9,8,7}打印arr[4]就是7 4 #include <stdio.h> 5 #include <stdlib.h> 6 int main() 7 { 8 int arr[] = { 1,2,3,4,8}; 9 10 printf("%d\n", arr[3]); 11 12 system("pause");

分数的计算

1.操作符重载 2.类的封装 #include <stdio.h> #include <algorithm> #include <iostream> using namespace std; int gcd(int m,int n)///求最大公约数 { if(n==0) return m; else return gcd(n,m%n); } class Fraction { public: Fraction(); Fraction(int a,int b):molec

《推荐系统》基于用户和Item的协同过滤算法的分析与实现(Python)

1:协同过滤算法简介 2:协同过滤算法的核心 3:协同过滤算法的应用方式 4:基于用户的协同过滤算法实现 5:基于物品的协同过滤算法实现 一:协同过滤算法简介 关于协同过滤的一个最经典的例子就是看电影,有时候不知道哪一部电影是我们喜欢的或者评分比较高的,那么通常的做法就是问问周围的朋友,看看最近有什么好的电影推荐.在问的时候,都习惯于问跟自己口味差不 多的朋友,这就是协同过滤的核心思想. 协同过滤是在海量数据中挖掘出小部分与你品味类似的用户,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的东西

Django项目:CRM(客户关系管理系统)--75--65PerfectCRM实现CRM课程分数排名

1 # classtop_urls.py 2 # --------64PerfectCRM实现CRM课程排名详情-------- 3 from django.conf.urls import url 4 from bpm.coursetop import coursetop_views 5 urlpatterns = [ 6 url( r'^coursetop_details/(\d+)/$', coursetop_views.coursetop_details, name="coursetop

锋利的SQL-基于窗口的排名计算

在SQL Server中,窗口被定义为用户指定的一组行. 之所以要提出窗口这个概念,因为这种基于窗口或分区的重新计算在实际工作应用范围比较广泛.例如,假设我们要对每个班级中的学生按成绩进行排序,在对第1个班级排序完成后,对第2个班级进行排序时编号需要重新从1开始.在SQL Server 2005之前,像这种排序方式实现起来是比较烦琐的.可以说,对新窗口重新启动计算是窗口计算的重要特点. 为支持窗口计算,SQLServer提供了OVER子句和窗口函数.窗口函数在MSDN Library中被翻译为开

锋利的SQL2014:基于窗口的排名计算

从SQL Server2005开始,提供了4个排名函数,分别是:ROW_NUMBER.RANK.DENSE_RANK和NTILE.ROW_NUMBER用于按行进行编号,RANK和DENSE_RANK用于按指定顺序排名,NTILE用于对数据进行分组. 对于排名函数而言,OVER子句中可以包含PARTITION BY和ORDER BY子句,其中,ORDER BY是必选的.因为对于排名而言,没有顺序的排名没有任何意义. 本节我们将使用9.1节创建的Students表为例进行介绍.像Students表这