如何确定数组中的值在哪个范围内?
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)。然后我想为输入的金额指定一个奖品。
如果金额是:
- 180 则奖品为 GiftCard1
- 280 然后奖品是 GiftCard20
- 等等。
我的代码:
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
}
我正在开发一个基于 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[]
数组并从数据库 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
}