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

How to determine in which scope is a value in an array?

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

Prize-1: MinAmount= 100, Prize= GiftCard10

Prize-2: MinAmount= 200, Prize= GiftCard20

Prize-3: MinAmount= 300, Prize= GiftCard30

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

如果金额是:

我的代码:

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

我使用了 decimal[] 数组并从数据库 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
    }