[英]How to compare object in foreach loop?
我目前正在检查购物车中的物品。 该物品可以多次兑换,但仅限于一定数量。 每个项目都有一个属性redeem_count,该属性存储可以兑换的时间。 因此,以下是我的代码,用于检查已兑换的每个商品的总数。
var previousCoupon = "";
var currentCoupon = "";
int count = 0;
foreach (var p in cart.Promotions)
{
var query = db.wmp_mst_mcp_promo
.Where(a => a.wmp_mcp_promo_id == p.PromotionId)
.Where(a => a.wmp_redeem_count != null && a.wmp_redeem_count > 0)
.SingleOrDefault();
if (query != null)
{
currentCoupon = query.wmp_mcp_promo_id;
if (previousCoupon == currentCoupon)
count++;
else
count = 0;
previousCoupon = currentCoupon;
if (count > query.wmp_redeem_count)
result.Invalidate(string.Format("You are not allowed to redeem more than {0} \"{1}\" voucher in 1 order", query.wmp_redeem_count, query.wmp_descriptions));
如您所见,编码有效,但前提是必须依次赎回同一项目。 这可能无效,因为并非所有客户都会按顺序赎回该物品。 如果他们兑换例如项目A,然后项目B,然后再次项目A,则会发生错误。 它仅在项目A,项目A然后项目B时有效。
已编辑
我想存储具有相同ID的任何项目,并只获得其中一个属性redeem_count,以便可以在其上执行if语句。 每个项目的redeem_count不同。
例
购物车中的物品
因此它将抛出结果。
有什么帮助吗? 谢谢。
我会做类似(伪代码)的事情:
var dict = new Dictionary<string /*item_Id*/, int /*count*/>;
// count redemptions for each id
foreach(var item in cart)
{
if(dict.ContainsKey(item.Id))
dict[item.Id]++;
else
dict.Add(item.Id, 1);
}
// check if any of them violate the allowed maximum
foreach( var itemId in dict.Keys)
{
if(dict[itemId ] > GetMaxRedeemCount(itemId))
{
result.Invalidate(...);
// you may want to break here...
// break;
}
}
试试这个解决方案;
var previousCoupon = "";
var currentCoupon = "";
int count = 0;
foreach (var p in cart.Promotions)
{
var query = db.wmp_mst_mcp_promo
.Where(a => a.wmp_mcp_promo_id == p.PromotionId)
.Where(a => a.wmp_redeem_count != null && a.wmp_redeem_count > 0);
if (query != null)
{
foreach(var queryItems in query)
{
currentCoupon = query.wmp_mcp_promo_id;
if (previousCoupon == currentCoupon)
count++;
else
count = 0;
previousCoupon = currentCoupon;
}
}
if (count > query.wmp_redeem_count)
result.Invalidate(string.Format("You are not allowed to redeem more than {0} \"{1}\" voucher in 1 order", query.wmp_redeem_count, query.wmp_descriptions));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.