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

时间:2017-07-14 07:42:53

标签: c# linq

我的表级为

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

如何找到标记为65/62的成绩为' C'使用linq查询(我没有字段最大分数)

1 个答案:

答案 0 :(得分: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