如何确定数组中的值在哪个范围内
本文关键字:范围内 何确定 数组 | 更新日期: 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
}