2016-11-17 158 views
-4

我們的每個產品後走出的foreach都是基於一定的categoryID找到正確的productID

當通過我們的產品循環它必須先找到該類別內的產品(其中它),然後走出的它。問題是,當它第一次經歷了foreach(找到正確的產品)時,它並沒有退出,它只是繼續查找剩餘的產品和其他categoryID。

我們該如何解決?

(我們使用的是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); 
    } 
+4

當您找到產品時使用「break」 – Hespen

回答

0

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

只要打破它。

 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; 
     } 
1

最好使用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); 
    }