如何使用 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 查询查找分数范围(没有最高分数)的主要内容,如果未能解决你的问题,请参考以下文章