gpt4 book ai didi

c# - 如何按条件获取组的最大对象(整个对象,而不是它的属性)

转载 作者:行者123 更新时间:2023-11-30 14:34:01 25 4
gpt4 key购买 nike

我想根据某些标准获得 IGrouping 的最大对象,但是到目前为止我似乎找不到允许我返回组内的整个对象的重载

List<Player> players = new List<Player>() 
{
new Player() { Name = "Peyton Manning", Age = 36, Position = "QB", Salary = 19000000 },
new Player() { Name = "Tom Brady", Age = 35, Position = "QB", Salary = 18400000 },
new Player() { Name = "Drew Brees", Age = 34, Position = "QB", Salary = 21000000 },
new Player() { Name = "Randy Moss", Age = 35, Position = "WR", Salary = 7000000 },
new Player() { Name = "Marvin Harrison", Age = 38, Position = "WR", Salary = 11000000 },
new Player() { Name = "Demaryius Thomas", Age = 23, Position = "WR", Salary = 5000000 },
new Player() { Name = "Ryan Clady", Age = 26, Position = "OT", Salary = 10000000 },
};

我想编写一个返回结果集的查询,我可以像这样枚举它:

foreach(Player player in highestPaidPlayers) 
{
Console.WriteLine("The highest paid {0} is {1}, who is being paid {2}", player.Position, player.Name, player.Salary);
}

到目前为止,这是我得到的:

var playersGroupedByPosition = players
.GroupBy(p => p.Position)
.Select(g => g.Max(p => p.Salary));

但这只会给我最高薪水的列表(例如整数列表)。 Max 似乎没有重载让我从 IGrouping 返回 Player 对象而不是 Max() ,它依赖于一个对象来实现IComparable

我的 LINQ 有点弱,所以我还没有想出如何编写子查询来获取组的最大条目并将其返回给外部选择,但是有没有更直接的方法来做到这一点?

我见过引用第三方库的解决方案 MoreLINQ (及其自定义运算符 MaxBy)但我不想走那条路(还)除非无法使用现有的查询运算符集 - 如果不能,我想了解现有运算符的限制阻止在查询中完成此操作。

最佳答案

我认为使用 ToListOrderBy 可以避免使用第三方代码:

IEnumerable<Player> highestPaidPlayers = players.GroupBy(p => p.Position)
.Select(g => g.ToList().OrderBy(p => p.Salary).Last());

关于c# - 如何按条件获取组的最大对象(整个对象,而不是它的属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14800480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com