如何使用linq获得字段的明确计数?

时间:2010-11-17 01:04:07

标签: c# linq

我想要做的是找出linq的投票结果。每个用户都有啤酒ID,即他们投票的啤酒,如果他们没有投票,则为空。我觉得这应该很简单,但对于我的生活,我可以;现在就弄明白。有没有一种使用linq的快速方法,我可以得到每个唯一的beerID的数量,然后获得最多的投票?

2 个答案:

答案 0 :(得分:2)

Users
    .GroupBy(u => u.beerID)
    .Select(g => new {beerId = g.Key, count = g.Count()})
    .OrderByDescending(x => x.count)
    //.FirstOrDefault()

答案 1 :(得分:2)

分组可能是您最好的选择 - 按啤酒ID对投票进行分组,然后计算每组中的项目。像这样的东西,例如:

var beerCounts = from vote in votes
                 where vote.BeerID != null
                 group vote by vote.BeerID into beerVoteGroups
                 select new
                 {
                     Count = beerVoteGroups.Count(),
                     BeerID = beerVoteGroups.Key
                 };

foreach (var group in beerCounts)
{
    Console.WriteLine("Beer {0} got {1} votes", group.BeerID, group.Count);
}

通过订购结果可以获得最多的选票。这是一个修改过的查询,根据获胜者的数量对啤酒进行排序,从获胜者开始。

var beerCounts = from vote in votes
                 where vote.BeerID != null
                 group vote by vote.BeerID into beerVoteGroups
                 let voteCount = beerVoteGroups.Count()
                 orderby voteCount descending 
                 select new
                 {
                     Count = voteCount,
                     BeerID = beerVoteGroups.Key
                 };

然后,您可以使用LINQ First运算符选择获胜者,例如:

var winner = beerCounts.First();