【问题标题】:Stepping out of foreach after finding right productID找到正确的 productID 后退出 foreach
【发布时间】:2016-11-17 10:16:25
【问题描述】:

我们的每个产品都基于某个 categoryID

循环浏览我们的产品时,它必须首先在该类别中找到产品(确实如此),然后退出该类别。问题是,当它第一次通过 foreach(找到正确的产品)时,它并没有走出去,它只是不断地通过它来寻找具有其他类别 ID 的剩余产品。

我们如何解决这个问题?

(我们使用的是 C# - 实体框架 - MSSQL)

干杯!

public ActionResult Index(int id)
    {
        var m = new Models.Product.Index();

        //m.DisplayName = "Produkter";
        //var scp = db.SCPconnection.FirstOrDefault(s => s.CategoryID == id);
        //if (id == scp.ProductID)
            {

            foreach (var item in db.Product.OrderBy(p => p.ProductName))
            {
                var mp = new Models.Product.ModelProduct();
                mp.SectorName = item.ProductName;
                mp.ProductID = item.ProductID;
                mp.DetailsUrl = item.Details;
                m.AllProducts.Add(mp);
            }
        }
        return View(m);
    }

【问题讨论】:

  • 找到产品时使用break

标签: c# foreach


【解决方案1】:

打破它。

        foreach (var item in db.Product.OrderBy(p => p.ProductName))
        {
            var mp = new Models.Product.ModelProduct();
            mp.SectorName = item.ProductName;
            mp.ProductID = item.ProductID;
            mp.DetailsUrl = item.Details;
            m.AllProducts.Add(mp);

            if(condition) //if it is needed
               break;
        }

【讨论】:

    【解决方案2】:

    最好使用 Where 子句过滤特定 ID。

    我强烈建议优化代码,为什么您需要将所有产品详细信息获取到业务逻辑,而不是使用条件查询所需内容。

    foreach (var item in db.Product.Where(p => p.ProductID.Equals(requiredID)).OrderBy(p => p.ProductName))
        {
            var mp = new Models.Product.ModelProduct();
            mp.SectorName = item.ProductName;
            mp.ProductID = item.ProductID;
            mp.DetailsUrl = item.Details;
            m.AllProducts.Add(mp);
        }
    

    【讨论】:

      【解决方案3】:

      break 关键字在此时立即退出 foreach。中断后的代码和剩余的迭代项将不会被处理。

      public ActionResult Index(int id)
      {
          var m = new Models.Product.Index();
      
              foreach (var item in db.Product.OrderBy(p => p.ProductName))
              {
                  var mp = new Models.Product.ModelProduct();
                  mp.SectorName = item.ProductName;
                  mp.ProductID = item.ProductID;
                  mp.DetailsUrl = item.Details;
                  m.AllProducts.Add(mp);
      
                 if (item.ProductID == id) 
                     break;
              }
          }
          return View(m);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-18
        • 1970-01-01
        相关资源
        最近更新 更多