如何确定数组中的值在哪个范围内

本文关键字:范围内 何确定 数组 | 更新日期: 2023-09-27 18:24:03

我正在进行一个基于Asp.Net MVC5的项目。我有与之相关的竞选活动和竞选奖品。对于CampaignId=1,有三个最低购物金额的奖品。例如:

奖品-1:最小金额=100,奖品=GiftCard10

奖品-2:最小金额=200,奖品=GiftCard20

奖品-3:最小金额=300,奖品=GiftCard30

在数据输入表单上,我想检查输入的金额是否有效(大于最低值-100)。然后我想为输入的金额指定一个奖金。

如果金额为:

  • 180则奖品为GiftCard1
  • 280然后奖品是GiftCard20
  • 等等

我的代码:

var prizes = db.CampaignPrizes.Where(c => c.CampaignId == cId)
.Select(c => c.MinimumAmount).ToArray();

我使用了一个decimal[]数组,并从DB ToArray中获得了MinAmounts。所以我可以达到最小值。

prizes.Min(), prizes.Max()

但是,我该如何指定正确的奖品呢?或者对于整个过程,有没有更简单的方法?

如何确定数组中的值在哪个范围内

首先,您应该跳过所有不相关(太大)的记录:

db.CampaingPrizes
  .Where(c => c.CampaingnId == cId)
  .Where(c => c.MinAmount <= amount)
. . .

现在你有所有类似的奖品,但你需要最大的奖品:

db.CampaingPrizes
  .Where(c => c.CampaingnId == cId)
  .Where(c => c.MinAmount <= amount)
  .Max(c => c.MinAmount);

使用您的数据和amount == 250,在第一步中我们得到{100, GiftCard10}{200, GiftCard20},在第二步中我们获得{200, GiftCard20}

这个怎么样?

    string GetPrize(int cId, decimal amount)
    {
        foreach (var campaignPrize in db.CampaignPrizes.Where(c => c.CampaignId == cId).OrderByDescending(x => x.MinimumAmount))
        {
            if (amount > campaignPrize.MinimumAmount)
            {
                return campaignPrize.Prize;
            }
        }
        return "No Gift"; // lesser than or equal to lowest MinimumAmount
    }