0

可能な値のリストがあります

|チーム| |年| 勝利| 「チーム 1」 2014 7 「チーム 2」 2015 9 「チーム 1」 2014 8

私は結果を取得したい

|チーム| |年| 勝利| 「チーム1」 2014 15 「チーム2」 2015 9

私はそれをやろうとしましたが、少なくとも1つのオブジェクトがIcomparableを実装する必要があります

 gameResults =
                    gameResults.GroupBy(t => new{t.ContendersName, t.Year})
                    .OrderBy(g => g.Key)
                    .Select(g => new PivotTeamResult()
                       {
                           ContendersName = g.Key.ContendersName,
                           Year = g.Key.Year,
                           Wins = g.Sum(x => x.Wins)                          

                       }).ToList();

IComparable を次のように実装します

public int CompareTo(オブジェクト obj) {

        PivotTeamResult teamResult = (PivotTeamResult)obj;

        if (this.ContendersName == teamResult.ContendersName)
        {
              return this.Year.CompareTo(teamResult.Year);
        }

        return teamResult.ContendersName.CompareTo(this.ContendersName);
    }

どうすれば正しい結果を得ることができますか?

4

3 に答える 3

3

ここでは、の比較子を実装しましたPivotTeamResultが、OrderBy句では匿名型を比較している{t.ContendersName, t.Year}ため、次のように直接注文を実行できます。

gameResults =
                gameResults.GroupBy(t => new{t.ContendersName, t.Year})
                .OrderBy(g => g.Key.ContendersName)
                .ThenBy(g => g.Key.Year)
                .Select(g => new PivotTeamResult()
                   {
                       ContendersName = g.Key.ContendersName,
                       Year = g.Key.Year,
                       Wins = g.Sum(x => x.Wins)                          

                   }).ToList();
于 2013-04-28T23:49:40.637 に答える
1

よくわかりませんが、問題は GroupBy ステートメントではなく OrderBy にあると思います。私が見たように、あなたは、比較できず、ソートできないグループキーを OrderBy しようとしています。

多分これはうまくいくでしょう:

  gameResults =
                gameResults.GroupBy(t => new{t.ContendersName, t.Year})
                .OrderBy(g => g.Key.ContendersName)
                .Select(g => new PivotTeamResult()
                   {
                       ContendersName = g.Key.ContendersName,
                       Year = g.Key.Year,
                       Wins = g.Sum(x => x.Wins)                          

                   }).ToList();
于 2013-04-28T23:29:23.980 に答える
0

あなたの CompareTo メソッドは十分に安全ではありません(PivotTeamResult)obj。それが必要だと思います:

gameResults = gameResults.GroupBy(t => new {t.ContendersName, t.Year}).Select(
                   g => new PivotTeamResult()
                   {
                       ContendersName = g.Key.ContendersName,
                       Year = g.Key.Year,
                       Wins = g.Sum(x => x.Wins)                          

                   }).ToList();

OrderBy、Sort、またはオブジェクトの比較を使用するその他のメソッドを使用する場合は、IComparable を実装する必要があります。この場合は必要ありません。

于 2013-04-28T23:39:42.713 に答える