2010-11-17 68 views
2

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

+0

,你可以发布你的模型是什么样子(即你的类,代表用户/票/啤酒)?这将是非常有益的! – Pwninstein 2010-11-17 01:11:38

回答

2
​​
+0

正确!这正是我需要的感谢! – Mike 2010-11-17 01:22:30

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一是运营商,例如:挑选赢家

var winner = beerCounts.First(); 
+0

同样真棒!谢谢伊恩 – Mike 2010-11-17 01:23:16