группировка результатов в представлении ASP.NET - PullRequest
0 голосов
/ 04 июня 2019

Я использую ASP.NET Core 2.2. У меня есть 2 модели и модель представления, которая вводит данные в представление. Я хочу заказать результаты на основе их 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 ]

1 голос
/ 04 июня 2019

Вы должны фильтровать свои продукты по типу продукта в каждой итерации. На данный момент вы просто отображаете все продукты для каждого типа продукта:

<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>
0 голосов
/ 04 июня 2019

Это даст вам возможность перейти к выражению linq:

var list = productTypes.Where(x => x.ProductTypeID == 1).Select(x => new Product()
        {
            ProductImage = x.ProductTypeImage,

        }).ToList();

Вам нужно будет решить, что добавить в предложение where, я использую ProductTypeID

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...