1

ThenByの順序を保持する式を作成するにはどうすればよいですか?以下の式は、Bowler.Number順に並べられたグループを生成しますが、各グループの一致はソートされません。

public class Match
{
   public int Id { get; set; }
   public virtual Bowler Bowler { get; set; }
   public byte GameNumber { get; set; }
   public int Score { get; set; }
   ...
}

public class Bowler
{
   public int Id { get; set; }
   public int Number { get; set;}
   ...
}

var GroupedMatches = db.Matches.OrderBy(m=>m.Bowler.Number).ThenBy(m=>m.GameNumber).GroupBy(m => m.Bowler.Number)

これが私が欲しい出力です:

1
  game1 295
  game2 199
  game3 202
  game4 178
2
  game1 177
  ...

現在私は2つのforeachを使用しています

foreach (var item in TheGroups){
    ... do some stuff with the Group
    foreach (var x in item.OrderBy(a =>a.Number)) { //<-- can I get rid of this OrderBy?
    ... do some stuff with the Matches in this group
   }
}

大したことではありません。LINQを使用すると、後でグループを処理するときではなく、グループが作成されたときにグループ内の一致を並べ替えることができると思いました。

4

1 に答える 1

1

ボウラー番号をキーにしたグループのリストをゲーム番号で並べ替えるのは無意味なので、出力をどうしたいのかわかりません。

それぞれがゲームの順序付きリストを含む、ボウラー番号の順序付きリストが必要であると仮定すると、次のようなものが機能する可能性があります

var GroupedMatches = db.Matches
    .GroupBy(m => m.Bowler.Number)
    .OrderBy(g => g.Key)
    .Select (g => new 
            { 
                BowlerNumber = g.Key, 
                Matches = g.OrderBy(m => m.GameNumber).ToList() 
            });

探している出力を取得する具体的な方法は次のとおりです

foreach(var group in GroupedMatches) {
    Console.WriteLine(group.BowlerNumber);
    foreach(var match in group.Matches) {
        Console.WriteLine("game{0} {1}", match.GameNumber, match.Score);
    }
}
于 2012-06-15T21:10:00.493 に答える