LINQ Group и считать с Максом
Может кто-нибудь написать запрос LINQ для следующего, пожалуйста
Учитывая приведенные ниже данные, мне нужен следующий игрок с наибольшим количеством очков каждую неделю и подсчет их, если они выиграют более одной недели. Если ничья приводит к наибольшему количеству очков за неделю, то каждый игрок получает счет один. Данные примера включают эту ситуацию
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
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() };
Присвоение имен здесь очень важно - надеюсь, изложив все, я сделал это достаточно ясно. Я уверен, что есть и другие способы сделать это, конечно, но это самый ясный способ, о котором я думал.