如何使用 Linq 查询查找分数范围(没有最高分数)

Posted

技术标签:

【中文标题】如何使用 Linq 查询查找分数范围(没有最高分数)【英文标题】:How to find range of Score using Linq query ( without maximum Score) 【发布时间】:2017-12-19 05:26:59 【问题描述】:

我有一个表等级级别

>Id  Grade Name MinScore
 1    A           90
 2    B           70
 3    C           60
 4    D           50

如何使用 linq 查询找到标记为 65/62 为“C”的等级(我没有字段最高分数)

【问题讨论】:

没有得到这个:Mark 65/62 as' C. 如果可以请详细说明 @TejasVaishnav:我相信这些是分数阈值。 90或以上是A,70到89是B,60到69是C,50到59是D。不知道如果低于50会发生什么...... 【参考方案1】:

实现这一目标的最短方法是:

var mark = 65;
//'grades' represents the table
var letter = grades.Where(x => mark > x.MinScore).Min(x => x.GradeName);
.Where():先过滤掉分数高于最低分的项目 .Min():然后取其余物品中最低的GradeName

编辑:

如果年级的命名发生变化,而不是A,B,C,......并且您不能再依赖字母顺序,那么这个可以帮助您:

var mark = grades.Where(x => mark > x.MinScore)
                 .OrderByDescending(x => x.MinScore)
                 .FirstOrDefault()?.GradeName;
.Where():先过滤掉分数高于最低分的项目 .OrderByDescending(): 从高到低排序 .FirstOrDefault():从结果中取出第一项 获取GradeName 属性

注意那行代码中的?,即Null-conditional Operator

【讨论】:

第二段代码还有一个优势,就是它可以更好地处理低于 50 的分数。

以上是关于如何使用 Linq 查询查找分数范围(没有最高分数)的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法为查询设置分数范围(或最大分数)

SQL 查找 MAX 值的总和

如何结合这两个查询来计算排名变化?

结构体练习

sql 如何查询每个班级中的最高分

查询score中选学多门课程的同学中分数为非最高分成绩的记录。