【发布时间】:2012-01-26 11:57:56
【问题描述】:
我有一个费用列表(linq 到 sql 实体 - 如果相关) - 费用上限、费用下限(均为十进制值)。我正在传递一个 property value - 比如说 90000,我想检查这个 property 值 best 是否匹配 one(或 first 值很多)从费用清单中。
费用可能是……
(较低的费用 - 较高的费用)
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();
}
问题 - 我将如何执行范围检查?我需要什么 linq 运算符?不确定我是否应该执行一段时间,从该范围内获得最好的费用?
注意:费用很容易...
(较低的费用 - 较高的费用)
0 - 50000
50001 - 75000
95001 - 140000
190000 - 500000
如果找到最佳匹配,则将其拉出或获取最接近的匹配...如果一个不是(足够接近)完全匹配,我可以显示可用匹配的列表
【问题讨论】: