ASP NET MVC 6 - 如何获取每个枚举值的产品计数

ASP NET MVC 6 - How to get Product count for each enum value

我使用 asp net mvc 6 开发了一个站点,我使用 enom 作为类别,现在我需要在每个 enom 值下获取产品计数,

这是我的枚举,

namespace ecom.Data
{
    public enum BookCategory
    {
        Action,
        Comedy,
        Drama,
        Others
    }
}

我想要的是让产品在这个 enoms 下计数,

See here, Front view without product count

这是我的控制器 看起来像,

using ecom.Data.Services;

namespace ecom.Controllers;

public class HomeController : Controller
{
    
    private readonly IBooksService _service;
    
    public async Task <IActionResult> BookView(string slug)
    {
        
        var data = await _service.GetBookBySlugAsync(slug);

        if(data == null) return View("NotFound");
        return View("BookView", data);
    }

这是我用作产品模型的模型,

namespace ecom.Models
{
    public class Book:IEntityBase
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public string Slug { get; set; }
        public string Description { get; set; }
        public double Price { get; set; }
        public string Image { get; set; }
        public string PublishDate { get; set; }
        //enom
        public BookCategory BookCategory { get; set; }
        //Relationships
        public List<Writter_Book> Writter_Books { get; set; }
        //Publisher
        public int PublisherId { get; set; }
        [ForeignKey("PublisherId")]
        public Publisher Publisher { get; set; }

    }
}

我现在的 cshtml 视图,

@foreach (var cat in Html.GetEnumSelectList<BookCategory>())
{
    <li><a href="#">@cat.Text <span>()</span></a></li>
}

我想在 foreach 的 span 标签内获得高于以上的产品数量, 任何人都可以帮助我吗??

您可以使用 GroupByCount 来实现您的目标。

类似

myBooksDataSource
    .GroupBy(book => book.BookCategory)
    .Select(group => new { Category = group.Key, Count = group.Count() });

这将输出 (BookCategory, Count) 的集合。

{ BookCategory.Action, 20 }
{ BookCategory.Comedy, 204 }

如果需要传递数据,您可以创建一个 class 来保存该数据。

public class BookCategoryCountData
{
    public BookCategory Category { get; set; }
    public int Count { get; set; }
}

和select使用该对象。

public IEnumerable<BookCategoryCountData> GetBookCountByCategory()
{             
     return _context.Books
         .GroupBy(book => book.BookCategory)                 
         .Select(group => new BookCategoryCountData() { 
             Category = group.Key, 
             Count = group.Count() 
         });
 }