私はC#とLINQを使用しています.Date型がありますDate
現時点では、このスクリプトを使用して、開始日の早いものから新しいものへとリストを並べ替えています。
次のコードでは、私のイベントはソートされません:
events.OrderBy(x => x.DateTimeStart).ToList();
return events.AsQueryable();
ここで何が問題なのですか?
私はC#とLINQを使用しています.Date型がありますDate
現時点では、このスクリプトを使用して、開始日の早いものから新しいものへとリストを並べ替えています。
次のコードでは、私のイベントはソートされません:
events.OrderBy(x => x.DateTimeStart).ToList();
return events.AsQueryable();
ここで何が問題なのですか?
events.OrderBy(x => x.DateTimeStart).ToList()
新しいリストを作成し、それを返しません。
あなたはおそらく次のようなものが欲しい
return events.OrderBy(x => x.DateTimeStart).ToList();
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として返すだけです。将来のコードで戻り値を使用する場合、それを使用する前に新しいイベントを追加しても、ソートされたすべてのイベントが常に含まれます。
注文したイベントを変数に保存し、この変数を Queryable(); として返します。
var orderedEvents = events.OrderBy(x => x.DateTimeStart).ToList();
return orderedEvents.AsQueryable();
または、その変数が必要ない場合は、順序付けられたイベントを直接返します。
return events.OrderBy(x => x.DateTimeStart).ToList().AsQueryable();