我正在开发基于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[]
数组并从数据库MinAmounts
获取ToArray
。所以我可以达到最小值。
prizes.Min(), prizes.Max()
但是,我怎么能指定正确的奖品? 或者对于整个过程,是否有更简单的方法?
答案 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
}