在列表中计算项目出现的次数

3

请看这段代码:

 @foreach (var item in Model.Categories)
        {
          <li><a href="#">@item</a></li>
        }

Model.Categories 是一个包含博客类别的字符串列表。该列表包含多个相同类别的实例,我想要显示的结果应该是这样的:

音乐(5)

其中 5 是类别音乐下博客文章的数量。您有什么关于如何实现这个目标的建议吗?

1个回答

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>
}

如果你可以在单个查询中从数据库中获取所有帖子计数,而不必在内存中循环遍历集合,则通常建议选择第二个选项。我相信你需要进行一些调整,但希望你能大致了解这个过程的思路。


那真是太棒了,朋友。完全按照我的要求工作。谢谢!我会尽快接受您的答案。 - user2915962
我会查看在控制器中完成它。据我所知,通常建议尽可能将代码保留在控制器中。再次感谢! - user2915962

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接