MVC Viewbag Group By和count独特的项目

时间:2013-11-27 21:33:04

标签: c# asp.net-mvc linq

大家好,我是Asp.net的新手,所以我在这里有个问题。我想要做的是使用分组依据并计入我的Viewbag。

下面的代码还可以,但我需要计数功能。

 ViewBag.details= db.Items
       .Where(x => x.Title.StartsWith(title)).GroupBy(a => a.UserId)
       .Select(g => g.FirstOrDefault())
       .OrderBy(b => b.Users.State)
        .ToList();

所以代码就像:

伦敦 中国 日本

但我需要单独计算:

伦敦(2) 中国(6) 日本(5)

非常感谢。费尔南多。

1 个答案:

答案 0 :(得分:0)

调用GroupBy后,您会得到一系列组 - IEnumerable<Grouping>,其中每个分组本身都会公开用于创建组的Key,并且它还包含一个IEnumerable,无论是哪个项目都是在原始数据集中。您只需在该分组上调用Count()即可获得小计。

然而,您的OP中缺乏任何具体模型会导致这里出现崎岖不平的道路,所以最好的估计值占上风,我觉得这应该会带你到处。

行动(和代码)胜于雄辩:

ViewBag.details = db.Items
    .Where(x => x.Title.StartsWith(title))
    .GroupBy(a => a.Users.State)
    .Select(n => new
    {
        Location = n.Key,
        Entity = n.FirstOrDefault(),
        LocationCount = n.Count()
    })
    .OrderBy(n => n.Location)
    .ToList();

未经测试且可能是iffy(Users.State看起来可能有问题)。全班结构可以立即清除雾气。

[edit] - 注意到原始代码将FirstOrDefault()实体添加到结果中,因此修改为包括在内。