我们的每个产品都基于某个categoryID
在循环我们的产品时,它必须首先找到该类别中的产品(它所做的),然后逐步退出。问题在于,当它第一次经历foreach(寻找正确的产品)时它没有走出去,它只是不断地通过它找到剩余的产品与其他categoryIDs。
我们如何解决这个问题?
(我们正在使用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);
}
答案 0 :(得分: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 :(得分:1)
最好使用特定ID的Where子句进行过滤。
我强烈建议优化代码,为什么需要将所有产品详细信息都提供给业务逻辑,而不是查询条件所需的内容。
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);
}
答案 2 :(得分: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);
}