Linq-获取一个介于下限和上限之间的值

本文关键字:之间 于下限 获取 一个 Linq- | 更新日期: 2023-09-27 18:21:24

我有一个费用列表(linq到sql实体-如果相关)-较高费用、较低费用(两者都是十进制值)。我正在传递一个property value,比如90000,我想检查这个property最佳是否与费用列表中的一个(或多个值中的第一个value)匹配。

费用可能是。。。

(较低费用-较高费用)

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

如果找到了最佳匹配,则退出获得最接近的匹配。。。也许我可以显示一个可用匹配的列表,如果其中一个没有(接近)完全匹配

Linq-获取一个介于下限和上限之间的值

只要一个简单的.Where就可以了:

var bestMatch = recommendedFees
              .Where(x => propValue >= x.Lower && propValue <= x.Upper)
              .OrderBy(x => x.Lower)                  
              .FirstOrDefault();

怎么样。。。

recommendedFees.Where(x => x.upperFee >= theFee).OrderByDescending(x => x.upperFee).Take(1).FirstOrDefault();
var myfee = 90000;
var myFoundFeeRange = (from feeRange in feeRanges 
          where feeRange.lowerfee <= myfee && myfee <= feeRange.upperfee 
          select feeRange ).First()

这将做一个简单的检查,以确保费用在边界内。并返回匹配边界