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