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 标签内获得高于以上的产品数量,
任何人都可以帮助我吗??
您可以使用 GroupBy
和 Count
来实现您的目标。
类似
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()
});
}
我使用 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 标签内获得高于以上的产品数量, 任何人都可以帮助我吗??
您可以使用 GroupBy
和 Count
来实现您的目标。
类似
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()
});
}