我正在使用ASP.NET Core 2.2。我有2个模型和一个将数据注入视图的viewmodel。 我要根据其productType订购结果。让我们说清楚
这是产品型号
public class Product
{
public int ProductID { get; set; }
public int ProductName { get; set; }
public string ProductImage { get; set; }
public int ProductTypeID { get; set; }
[ForeignKey("ProductTypeID")]
public virtual ProductType ProductType{ get; set; }
}
这是 ProductType 模型
public class ProductType
{
public int ProductTypeID { get; set; }
public int ProductTypeName { get; set; }
public string ProductTypeImage { get; set; }
public string ProductTypeDescription { get; set;
}
最后是 DishesViewModel
public class DishesVM
{
public IEnumerable<ProductType> ProductType { get; set; }
public IEnumerable<Product> Product { get; set; }
}
在 MyController 中,我从数据库中获取数据,然后使用自动映射器将其映射到DishViewModel
public class HomeController : Controller
{
public IActionResult Dishes()
{
var productTypes= _context.ProductType.OrderBy(p =>p.ProductTypeID).ToList();
var products= _context.Products.OrderBy(p => p.ProductID).ToList();
var DishesVM = new DishesVM();
DishesVM.ProductType = _mapper.Map<IEnumerable<ProductType>>(productTypes);
DishesVM.Product = _mapper.Map<IEnumerable<Product>>(products);
}
}
现在在菜式视图中,我可以嵌套 foreach
@model DishesViewModel
<div>
foreach(var pt in Model.ProductType)
{
<h1>pt.ProductTypeName</h1>
foreach(var p in Model.Product)
{
p.ProductName
}
}
</div>
这可以正常工作,但唯一的问题是,它可以退回所有产品。但是我希望每个产品类别的标题前都有其产品。这是我想要和现在拥有的东西的视觉表示。
答案 0 :(得分:1)
您必须在每次迭代中按产品类型过滤产品。目前,您只显示每种产品类型的所有产品:
<div>
foreach(var type in Model.ProductType)
{
//products which belong to the particular type
var productsForType = Model.Product.Where(x => x.ProductTypeID == type.ProductTypeID);
<h1>pt.ProductTypeName</h1>
foreach(var product in productsForType)
{
product.ProductName
}
}
</div>
答案 1 :(得分:0)
这将使您跳上linq语句:
var list = productTypes.Where(x => x.ProductTypeID == 1).Select(x => new Product()
{
ProductImage = x.ProductTypeImage,
}).ToList();
您将需要确定要放在where子句中的内容,我正在使用ProductTypeID