2009-03-12 30 views
2

行が見つからない場合は...LINQ - 最大値を持つフィールドからの戻り値私はこのようなテーブルを持っている

ID Description LowThreshold HighThreshold 
1 BAD   0.0   .69 
2 MEETS  .70   .89 
3 GOOD   .90   2 

ここでオブジェクトが基づいて右の説明を選択しますLINQクエリを書くことです与えられた10進数例えば.75は.70と.89の間にあるので、 "MEETS"を返します。しかし、キッカーは、Numberがすべての範囲よりも高い場合は、HighThresholdが最も高いレコードのDescriptionを自動的に返します。だから、私が5を渡すと、「良い」が返されるはずです。

私はこれまでのところ、これを持っているが、明らかに、2よりもそれがスコアとエラーが出て高い:

private string GetEvaluationDescription (decimal score) 
{ 
     string evaluationText = myContext.PerformanceRanges.Where 
         (e => 
           e.LowThreshold <= score 
           && 
           e.HighThreshold >= score 
         ) 
         .Select(eval => eval.Description).First().ToString(); 
} 

私はこの1つのだけのクエリでこれを実現したいのですが、私の想像力が私を取得していませんそこ。私はthisの記事で見つけたもの試みたが、それはこれについて

答えて

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クエリは、その要素を選択しますThresholdの範囲と一致し、値が大きい場合(最初のクエリでnullが返されます)、最大の範囲が選択されます。

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(); 
関連する問題