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

时间:2015-11-23 06:51:48

标签: c# arrays asp.net-mvc-5 decimal

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

  

Prize-1:MinAmount = 100,Prize = GiftCard10

     

Prize-2:MinAmount = 200,Prize = GiftCard20

     

Prize-3:MinAmount = 300,Prize = GiftCard30

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

如果金额为:

  • 180然后奖品是GiftCard1
  • 280然后奖品是GiftCard20
  • 等等。

我的代码:

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

我使用了decimal[]数组并从数据库MinAmounts获取ToArray。所以我可以达到最小值。

prizes.Min(), prizes.Max()

但是,我怎么能指定正确的奖品? 或者对于整个过程,是否有更简单的方法?

2 个答案:

答案 0 :(得分:2)

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

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}

答案 1 :(得分:1)

这个怎么样?

    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
    }