请看这段代码:
@foreach (var item in Model.Categories)
{
<li><a href="#">@item</a></li>
}
Model.Categories
是一个包含博客类别的字符串列表。该列表包含多个相同类别的实例,我想要显示的结果应该是这样的:
音乐(5)
其中 5 是类别音乐下博客文章的数量。您有什么关于如何实现这个目标的建议吗?
GroupBy
方法,像这样:@foreach (var group in Model.Categories.GroupBy(c => c))
{
<li><a href="#">@group.Key (@group.Count())</a></li>
}
...
viewModel.PostCounts =
(from p in db.Posts
group p by p.Category into g
select new PostCountViewModel
{
CategoryName = g.Key,
PostCount = g.Count()
})
.ToList();
return View(viewModel);
然后在您的视图中:
@foreach (var item in Model.PostCounts)
{
<li><a href="#">@item.CategoryName (@item.PostCount)</a></li>
}
如果你可以在单个查询中从数据库中获取所有帖子计数,而不必在内存中循环遍历集合,则通常建议选择第二个选项。我相信你需要进行一些调整,但希望你能大致了解这个过程的思路。