Linq - 每个组的最高值 [英] Linq - Top value from each group

查看:16
本文介绍了Linq - 每个组的最高值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用 Linq 从每个组中选择 Top 值

当我有一个代码段时:

var 团队 = 新团队[]{新团队{PlayerName="Ricky",TeamName="澳大利亚", PlayerScore=234},新团队{PlayerName="Hussy",TeamName="澳大利亚", PlayerScore=134},新团队{PlayerName="Clark",TeamName="Australia", PlayerScore=334},新团队{PlayerName="Sankakara",TeamName="SriLanka", PlayerScore=34},新团队{PlayerName="Udana",TeamName="SriLanka", PlayerScore=56},新团队{PlayerName="Jayasurya",TeamName="SriLanka", PlayerScore=433},新团队{PlayerName="Flintop",TeamName="England", PlayerScore=111},新团队{PlayerName="Hamirson",TeamName="England", PlayerScore=13},新团队{PlayerName="Colingwood",TeamName="England", PlayerScore=421}};

想要的结果:

<前>队名 球员姓名 得分第 433 章英格兰科林伍德 421澳大利亚克拉克 334

解决方案

我的回答与 Yuriy 的相似,但使用的是 MaxBy 来自 MoreLINQ,不需要通过整数进行比较:

var query = from player in playergroup player by player.TeamName 到 team选择 team.MaxBy(p => p.PlayerScore);foreach(查询中的播放器播放器){Console.WriteLine("{0}: {1} ({2})",player.TeamName,播放器.播放器名称,player.PlayerScore);}

请注意,我已将类型名称从Team"更改为Player",因为我认为这更有意义 - 您不是从一组球队开始,而是从一组球员开始.

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天全站免登陆