簡體   English   中英

如何使用linq獲得字段的不同計數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM