の最大のオブジェクトをいくつかの基準で取得したいのですが、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
返せるようにするためのオーバーロードはないようです。Player
IGrouping
Max()
IComparable
私の LINQ は少し弱いので、サブクエリを記述してグループの最大エントリを取得し、それを外部選択に返す方法を理解していませんが、これを行うより簡単な方法はありますか?
サードパーティのライブラリMoreLINQ (およびそのカスタム operator MaxBy
) を使用して参照するソリューションを見てきましたが、既存の一連のクエリ演算子を使用できない場合を除き、(まだ)そのルートに行きたくありません。そうでない場合は、これをクエリで実行できないようにする既存の演算子の制限を理解したいと思います。