LINQ的 - 各组前值 [英] Linq - Top value from each group

查看:115
本文介绍了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 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆