簡體   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