Linq - Top value from each group
c#, lambda, linq
Solution
My answer is similar to Yuriy's, but using `MaxBy` from MoreLINQ, which doesn't require the comparison to be done by ints:
var query = from player in players
group player by player.TeamName into team
select team.MaxBy(p => p.PlayerScore);
foreach (Player player in query)
{
Console.WriteLine("{0}: {1} ({2})",
player.TeamName,
player.PlayerName,
player.PlayerScore);
}
Note that I've changed the type name from "Team" to "Player" as I believe it makes more sense - you don't start off with a collection of teams, you start off with a collection of players.
Problem
How can I employ Linq to select Top value from each group when I have a code segment like : ``` var teams = new Team[] { new Team{PlayerName="Ricky",TeamName="Australia", PlayerScore=234}, new Team{PlayerName="Hussy",TeamName="Australia", PlayerScore=134}, new Team{PlayerName="Clark",TeamName="Australia", PlayerScore=334}, new Team{PlayerName="Sankakara",TeamName="SriLanka", PlayerScore=34}, new Team{PlayerName="Udana",TeamName="SriLanka", PlayerScore=56}, new Team{PlayerName="Jayasurya",TeamName="SriLanka", PlayerScore=433}, new Team{PlayerName="Flintop",TeamName="England", PlayerScore=111}, new Team{PlayerName="Hamirson",TeamName="England", PlayerScore=13}, new Team{PlayerName="Colingwood",TeamName="England", PlayerScore=421} }; ``` Desired Result : ``` Team Name Player Name Score Srilanka Jayasurya 433 England colingwood 421 Australia Clark 334 ```