我有一张这样的桌子......
ID Description LowThreshold HighThreshold
1 BAD 0.0 .69
2 MEETS .70 .89
3 GOOD .90 2
这里的对象是编写一个LINQ查询,它将根据给定的小数选择正确的描述。例如.75介于.70和.89之间,因此它将返回“MEETS”。但是,如果数字高于所有范围,则踢球者会自动返回具有最高HighThreshold的记录的描述。所以,如果我传入5,我应该返回“GOOD”。
到目前为止,我有这个,但它的分数高于2,显然是错误的:
private string GetEvaluationDescription (decimal score)
{
string evaluationText = myContext.PerformanceRanges.Where
(e =>
e.LowThreshold <= score
&&
e.HighThreshold >= score
)
.Select(eval => eval.Description).First().ToString();
}
我想用这一个查询完成这个,但我的想象力并没有让我在那里。我试图在this帖子中找到但是无法让它工作
答案 0 :(得分:2)
这个怎么样:
var range = myContext.PerformanceRanges
.SingleOrDefault(e=>e.LowThreshold <= score && e.HighThreshold >= score)??
PerformanceRanges.Single(
e=>e.HighThreshold == PerformanceRanges
.Max(p=> p.HighThreshold)
);
string evaluationText = range.Description;
range
查询将选择与阈值范围匹配的元素,如果值更大(第一个查询将返回null),它将选择最大范围。
答案 1 :(得分:1)
这个怎么样:
string evaluationText = myContext.PerformanceRanges.Where
(e =>
(e.LowThreshold <= score
&&
e.HighThreshold >= score) ||
(e.HighThreshold ==
myContext.PerformanceRanges.Max (
x => x.HighThreshold)
&& score > e.HighThreshold )
)
.Select(eval => eval.Description).First().ToString();