私は、フィックスのリストを持っています(関連する場合はlinqからSQLエンティティ - 関連する場合) - 上段手数料、下限手数料(どちらも小数点以下の桁数)。私はproperty value
を渡しています - 90000を言うと、私はこのproperty
値最高マッチ(または多数のうち最初値)場合は手数料のリストから確認したいです。Linq - 下限と上限との間の値を取得する
手数料が何かのような...
(下の料金 - 上位料)することができ - 90000帯最高75001のようなもののために、これらの値のうち
0 - 50000
50001 - 75000
75001 - 90000
90001 - 140000
190000 - 500000
、90000一致しています、だから私はそれを引き出したいFeeDetailエンティティ。私は実際にどの演算子を使用するかわかりません、どんな助けもありがとう、私のコードはこれまでです...
[Test]
public void GetFeeRange()
{
const int id = 44;
var propValue = 90000;
//get a specific fee entity, then get the range of fee details...
var recommendedFees = RepoSession.All<Fee>()
.Where(x =>
x.ClientSurveyTypeID == id)
.GroupJoin(_readOnlySession.All<FeeDetail>(),
x => x.FeeID,
y => y.FeeID,
(x, y) => new
{
FeeDetail = y.DefaultIfEmpty()
})
.Select(x => x.FeeDetail)
.SingleOrDefault();
Assert.IsNotNull(recommendedFees);
//order fees by lowest fee - *the bit I am stuck on*
var bestMatch = recommendedFees.OrderBy(x => x.Lower)
.TakeWhile(x => propValue >= x.Lower || propValue <= x.Upper)
.FirstOrDefault();
}
質問 - どのようにレンジチェックを実行しますか? linqのどの演算子が必要ですか?私はtakewhileを実行する必要があるかどうか分からない、その範囲から最高の手数料を得る?
注:料金は非常に簡単に...
(下の料金 - 上位料)可能性があり、最良の一致が見つかった場合、
0 - 50000
50001 - 75000
95001 - 140000
190000 - 500000
ていることに引っ張ったり取得最も近い一致...おそらく、一致するものが近くにない場合、利用可能な一致のリストを表示することができます
+1しかし、OR演算子はANDで置き換える必要があります。 '.Where(x => propValue> = x.Lower && propValue <= x.Upper)' –
@PaulSasikええと、投稿して変更した後にそれを見つけました。ありがとう。 –