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

时间:2014-06-23 15:57:44

标签: asp.net list count

看一下这段代码:

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

Model.Categories是包含博客类别的字符串列表。该列表包含几个相同类别的出现,我想显示如下结果:

音乐(5)

其中5是音乐类别下的博客数量。 关于如何做到这一点的任何提示?

1 个答案:

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

如果您可以在单个查询中从数据库中撤回所有帖子计数,而不是必须遍历内存中的集合,我通常建议使用第二个选项。我相信你必须做出调整,但希望你能大致了解它的外观。