看一下这段代码:
@foreach (var item in Model.Categories)
{
<li><a href="#">@item</a></li>
}
Model.Categories
是包含博客类别的字符串列表。该列表包含几个相同类别的出现,我想显示如下结果:
音乐(5)
其中5是音乐类别下的博客数量。 关于如何做到这一点的任何提示?
答案 0 :(得分:2)
Linq的一点点帮助。尝试使用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>
}
如果您可以在单个查询中从数据库中撤回所有帖子计数,而不是必须遍历内存中的集合,我通常建议使用第二个选项。我相信你必须做出调整,但希望你能大致了解它的外观。