[英]How can I get a distinct count of a field using linq?
我想做的是找出linq的投票結果。 每個用戶都有一個BeerID,即他們投票贊成的啤酒,如果未投票,則為null。 我覺得這應該很簡單,但是對於我自己的一生,我現在無法解決。 有沒有一種使用linq的快速方法,我可以獲取每個唯一的BeerID的計數,然后獲得票數最多的那個?
Users
.GroupBy(u => u.beerID)
.Select(g => new {beerId = g.Key, count = g.Count()})
.OrderByDescending(x => x.count)
//.FirstOrDefault()
分組可能是最好的選擇-按啤酒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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.