6

私はC#とLINQを使用しています.Date型がありますDate

現時点では、このスクリプトを使用して、開始日の早いものから新しいものへとリストを並べ替えています。

次のコードでは、私のイベントはソートされません:

      events.OrderBy(x => x.DateTimeStart).ToList();    
      return events.AsQueryable();

ここで何が問題なのですか?

4

3 に答える 3

12

events.OrderBy(x => x.DateTimeStart).ToList()新しいリストを作成し、それを返しません。

あなたはおそらく次のようなものが欲しい

return events.OrderBy(x => x.DateTimeStart).ToList(); 
于 2013-02-22T08:09:24.750 に答える
4

events.OrderBy(x => x.DateTimeStart): プロパティDateTimeStartでイベントを並べ替えるクエリを宣言します。クエリはまだ実行されていません。

events.OrderBy(x => x.DateTimeStart).ToList();: 前のクエリを処理します。すべてのイベントを反復処理し、それらのDateTimeStartをチェックし、それらを並べ替えて安全な結果をListとして保存し、結果を破棄します! あなたはそれを安全にしなかったからです。それを次のようなものと比較してください。

int a = 0;
a + 1;
b = a; // b is 0

return events.AsQueryable();: ここでは、並べ替えではなく、元のイベントを返しています。

次のようにコードを記述する必要があります。

return events.OrderBy(x => x.DateTimeStart).ToList().AsQueryable();

そのバージョンでは、並べ替えられたイベントの静的リストが作成されます。ここでイベントリストを変更しても、結果には変更が反映されません。

2番目の解決策は次のとおりです。

return events.OrderBy(x => x.DateTimeStart).AsQueryable();

そのバージョンでは機能しません。イベントを並べ替える方法を宣言し、その方法をIQueryableとして返すだけです。将来のコードで戻り値を使用する場合、それを使用する前に新しいイベントを追加しても、ソートされたすべてのイベントが常に含まれます。

于 2013-02-22T08:33:53.040 に答える
2

注文したイベントを変数に保存し、この変数を Queryable(); として返します。

var orderedEvents = events.OrderBy(x => x.DateTimeStart).ToList();    

return orderedEvents.AsQueryable();

または、その変数が必要ない場合は、順序付けられたイベントを直接返します。

return events.OrderBy(x => x.DateTimeStart).ToList().AsQueryable();
于 2013-02-22T08:09:31.280 に答える