1

Linq クエリに問題があります。トップレベルでグループ化され、トップレベルの文字列でアルファベット順に並べられた結果セットを返す、次のような形式のクエリがあります。トップレベルの文字列 (group by 句はアルファベット順に並べられる) とサブレベルの文字列もアルファベット順 (各サブグループもアルファベット順) の両方で並べ替えられた結果セットを返したいと考えています。私が期待しているのは、次のようなものです。

    • B
  • B
    • B

私のクエリは次のようなものです:

records.results
       .Where(table => string.Compare(table, expected) == 0)
       .OrderByDescending(table => table.name)
       .GroupBy(table => table.name);
       .OrderBy(group => group.Key);

OrderByDescending ステートメントが groupby 句の個々のレコードの順序を変更することを期待していますが、何の影響もありません。ただし、グループの注文結果を受け取っています。どんな助けでも大歓迎です!

4

1 に答える 1

3

あなたの問題は、最終的なOrderByステートメントがグループ自体を注文していることです。やりたいことは、各グループの要素を並べ替えることです。試す:

   records.results
     .Where(table => string.Compare(table, expected) == 0)
     .OrderByDescending(table => table.name)
     .GroupBy(table => table.name);
     .Select(g => g.OrderByDescending(element => element.Name);

グループを注文するプロパティの名前はわかりませんが、ここではName.

ここで重要なのIGroupingは、それ自体がIEnumerable. IGrouping hereのドキュメントを参照してください。それが を実装していることに注意してください。したがって、 (documented here )の戻り値の型であるof内の各グループをIEnumerable呼び出すことができます。 OrderByDescendingIEnumerableIGroupingsEnumerable.GroupBy

は( ではなく)OrderByDescendingを返すため、この操作は各グループのプロパティを失います。それが必要な場合は、単に匿名型を選択してキーを保持することをお勧めします。ファイナルを次のように置き換えます。IEnumerableIGroupingKeySelect

 .Select(g => new { g.Key, elements = g.OrderByDescending(element => element.Name) });

または、 hereIGroupingの指示に従って、 hereをインスタンス化するロジックを作成することもできます。

于 2013-06-07T17:18:05.683 に答える