Linq order by, group by, order by each group?
2023-08-02 19:23:38
質問
次のようなオブジェクトがあります。
public class Student
{
public string Name { get; set; }
public int Grade { get; set; }
}
私は次のクエリを作成したいと思います:学生名によって成績をグループ化し、成績によって各学生グループを順序付けし、各グループ内の最大成績によってグループを順序付けます。
ということで、以下のような感じになります。
A 100
A 80
B 80
B 50
B 40
C 70
C 30
以下のクエリを作成しました。
StudentsGrades.GroupBy(student => student.Name)
.OrderBy(studentGradesGroup => studentGradesGroup.Max(student => student.Grade));
しかし、これでは
IEnumerable
IGrouping
を返すだけで、中のリストをソートする方法はありません。
foreach
クエリでそれを行い、その結果を
AddRange
.
もっときれいな方法はないのでしょうか?
どのように解決するのですか?
もちろんです。
var query = grades.GroupBy(student => student.Name)
.Select(group =>
new { Name = group.Key,
Students = group.OrderByDescending(x => x.Grade) })
.OrderBy(group => group.Students.First().Grade);
最初のエントリが最も高い評点であることがすでに分かっているので、順序付け後に各グループの最初の評点を取るだけで済ませることができることに注意してください。
そして、それらを表示することができます。
foreach (var group in query)
{
Console.WriteLine("Group: {0}", group.Name);
foreach (var student in group.Students)
{
Console.WriteLine(" {0}", student.Grade);
}
}
関連
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] 各GROUP BYグループの最初の行を選択しますか?
-
[解決済み] LINQで複数の "order by "を使用する
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] 複数の列でgroup byを使用する
-
[解決済み] LINQのGroup by
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] 複数の列でグループ化する
-
[解決済み] LINQを使用して、プロパティ値の最小または最大値を持つオブジェクトを選択する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない