将结果分组到一个ASP.NET视图中

时间:2019-06-04 15:02:28

标签: c# asp.net entity-framework asp.net-core

我正在使用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>

这可以正常工作,但唯一的问题是,它可以退回所有产品。但是我希望每个产品类别的标题前都有其产品。这是我想要和现在拥有的东西的视觉表示。

这是我想要的 what I want

但这是我所拥有的  what I have

2 个答案:

答案 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