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

时间:2016-12-22 06:52:13

标签: c# asp.net foreach

我正在检查购物车中的商品。该物品可以多次兑换,但仅限于一定数量。每个项目都有一个属性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)有效

所以它会抛出result.Invalidate

有任何帮助吗?感谢。

2 个答案:

答案 0 :(得分:2)

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

for (int i = 0; i < jsonarray.length(); i++) {
   HashMap<String, String> map = new HashMap<String, String>();

   jsonobject = jsonarray.getJSONObject(i);
   // Retrive JSON Objects
   map.put("id", jsonobject.getString("id"));
   map.put("name", jsonobject.getString("name"));
   map.put("image", jsonobject.getString("image"));
   // Set the JSON Objects into the array
   arraylist.add(map);
}

答案 1 :(得分:0)

试试这个解决方案;

 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));