繁体   English   中英

如何在foreach循环中比较对象?

[英]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不同。

购物车中的物品

  • 项目A-2(redeem_count = 2) 有效
  • 项目B-2(redeem_count = 1) 无效
  • 项目C-3(redeem_count = 4) 有效

因此它将抛出结果。

有什么帮助吗? 谢谢。

我会做类似(伪代码)的事情:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM