我有一個費用列表(如果相關,則爲linq到sql實體) - 上限費用,下限費用(都是十進制值)。我傳遞一個property value
- 說90000,我想從費用清單檢查這個property
值最好比賽一個(或第一值超出了許多)。Linq - 獲取一個介於下限和上限之間的值
的費用可能是這樣的......
(低費用 - 上費)
0 - 50000
50001 - 75000
75001 - 90000
90001 - 140000
190000 - 500000
在這些值,90000是最適合像75001匹配 - 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();
}
Question-我將如何執行範圍檢查?我需要什麼linq運算符?不確定我是否應該花點時間,從這個範圍內獲得最好的費用?
注:收費可以很容易地是...
(低費用 - 上費)
0 - 50000
50001 - 75000
95001 - 140000
190000 - 500000
如果找到最佳匹配,拉動了這一點OR得到最接近的匹配......也許我可以展示可用匹配的列表,如果其中一個不足夠接近完全匹配
+1,但OR運算符應該用AND替換。 '.Where(x => propValue> = x.Lower && propValue <= x.Upper)' –
@PaulSasik是的,發現後,我發佈和改變它。謝謝。 –