LINQ 分组和最大计数

标签 linq count max linq-group

有人可以为以下内容编写 LINQ 查询吗

鉴于以下数据,我需要以下内容 每周得分最高的玩家以及获胜超过一周的玩家数量。如果一周内得分最高,则每位玩家的计数为 1。示例数据包含这种情况

Week   Player         Points 
1      Steve            35 
1      Mark             29 
1      John             26 
2      John             23 
2      Mark             21 
2      Steve            21 
3      Mark             42 
3      John             42 
3      Steve            19 
4      Pete             28 
4      John             16 
4      Steve            14 
4      Mark             12 

结果将是

Player         Count
Steve            1
John             2
Mark             1
Pete             1

最佳答案

我可能会将其分为两个步骤 - 这实际上并不意味着任何内容都会更早执行,但它更容易理解。

// For each week, yield a sequence of winning results
var winningResultsByWeek = from result in results
                           group result by result.Week into week
                           let winningScore = week.Max(x => x.Points)
                           select week.Where(x => x.Points == winningScore)

var winsPerPlayer = from winningResults in winningResultsByWeek
                    from winningResult in winningResults
                    group winningResult by winningResult.Player into winsByPlayer
                    select new { Player = winsByPlayer.Key,
                                 Count = winsByPlayer.Count() };

命名在这里非常重要 - 希望通过拼写,我已经把它说得相当清楚了。我确信当然还有其他方法可以做到这一点,但这是我想到的最清晰的方法。

关于LINQ 分组和最大计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16638719/

相关文章:

JavaScript:计算文本中字符的最小长度,忽略内部的特殊代码

python - Pandas : Is there a way to count the number of occurrences of values in a given column which contains dictionaries values in the cells?

python - 从列表中查找最大元素的索引

MYSQL单表MAX和MIN时间差

linq - 动态 LINQ : Comparing Nested Data With Parent Property

c# - Visual Studio 如何在不中断其 IEnumerator<T> 的 MoveNext 的情况下评估 IEnumerable?

c# - 如何使用 Linq 查询 Mongo C# 2.2 驱动程序中的嵌套列表?

c# - 使用 Linq 生成要从另一个集合中删除的事物的集合

sql - 为什么在 WINDOW FUNCTION 中使用 GROUP BY

c - 最小最大数字数组