LINQ的 - 各组前值 [英] Linq - Top value from each group
本文介绍了LINQ的 - 各组前值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我如何使用LINQ到从每个组中选择Top值
当我有一个code段,如:
VAR团队=新团队[]
{
新的团队{PlayerName =瑞奇,TeamName =澳大利亚,PlayerScore = 234},
新的团队{PlayerName =坏东西,TeamName =澳大利亚,PlayerScore = 134},
新的团队{PlayerName =克拉克,TeamName =澳大利亚,PlayerScore = 334}, 新的团队{PlayerName =Sankakara,TeamName =SriLanka的,PlayerScore = 34},
新的团队{PlayerName =Udana,TeamName =SriLanka的,PlayerScore = 56},
新的团队{PlayerName =Jayasurya,TeamName =SriLanka的,PlayerScore = 433}, 新的团队{PlayerName =Flintop,TeamName =英格兰,PlayerScore = 111},
新的团队{PlayerName =Hamirson,TeamName =英格兰,PlayerScore = 13},
新的团队{PlayerName =Colingwood,TeamName =英格兰,PlayerScore = 421}
};
所需的结果:
队名球员得分名
的
斯里兰卡Jayasurya 433英格兰colingwood 421澳大利亚克拉克334
解决方案
我的答案是类似尤里的,但使用<一个href=\"http://$c$c.google.com/p/morelinq/source/browse/trunk/MoreLinq/MaxBy.cs\"><$c$c>MaxBy$c$c>从 MoreLINQ ,该不要求比较由整数来完成:
VAR的查询=从球员的球员
组玩家通过player.TeamName到队
选择team.MaxBy(P =&GT; p.PlayerScore);的foreach(查询Player播放器)
{
Console.WriteLine({0}:{1}({2}),
player.TeamName,
player.PlayerName,
player.PlayerScore);
}
请注意,我已经从团队,以玩家,因为我相信它更有意义的变化类型名称 - 您不队伍的集合开始,你的球员的集合开始<。 / p>
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
解决方案
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.
这篇关于LINQ的 - 各组前值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文