使用 LINQ 选择最常见的值

Posted

技术标签:

【中文标题】使用 LINQ 选择最常见的值【英文标题】:Select most frequent value using LINQ 【发布时间】:2011-10-07 12:59:35 【问题描述】:

我正在尝试选择表中最常见的五个值并将它们返回到一个列表中。

    var mostFollowedQuestions = (from q in context.UserIsFollowingQuestion
                                 select *top five occuring values from q.QuestionId*).toList();

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:
var mostFollowedQuestions = context.UserIsFollowingQuestion
                                    .GroupBy(q => q.QuestionId)
                                    .OrderByDescending(gp => gp.Count())
                                    .Take(5)
                                    .Select(g => g.Key).ToList();

【讨论】:

@wardh 我想你会发现这实际上给了你最少经常出现的值。我的回答略有不同,但会根据要求给出最频繁发生的情况。 已编辑以提供最频繁的 - 将 Orderby 更改为 OrderbyDescending【参考方案2】:
 int[] nums = new[]  1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7 ;

 IEnumerable<int> top5 = nums
            .GroupBy(i => i)
            .OrderByDescending(g => g.Count())
            .Take(5)
            .Select(g => g.Key);

【讨论】:

以上是关于使用 LINQ 选择最常见的值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 LINQ 从列表中选择提供的索引范围内的值

使用 linq 在一个 SQL 查询 (EF6) 中为多个数据库列选择可能的值

Linq-选择中的优选值

使用 LINQ 从数据集中选择行,其中 RowsID 的列表位于 List<T>

如何使用 LINQ 选择特定元素名称?

LINQ 性能常见问题解答