ASP.NET MVC-Model.OrderBy Dateは効果がありません
-
07-07-2019 - |
質問
結果を日付で並べ替えるのが困難です。特別な方法はありますか? 私は今これをやっているから:
var db = new DB();
var articles = db.Articles;
var orderedArticles = articles.OrderBy(a => a.Date);
return View(orderedArticles.ToList());
日付は日時フィールドです。 また、 OrderBy(..)または OrderByDescending(..)
には効果がありませんだから何が起こっているのかを確認できました。
毎回新しい記事を追加します。時刻ではなく日付を使用しています たとえば、同じ日に2つの記事がある場合: with:
var orderedArticles = db.Articles.OrderByDescending(a => a.Date).ToList();
私は持っているだろう
Id Title Date
10 First Added Article 16/09/2009 00:00
11 Second Added Article 16/09/2009 00:00
15 Old Article Added Later 15/09/2009 00:00
つまり、日付でフィルタリングしていることがわかりますが、問題は同じ日付になったときにソートがフォーカスを失うことです。 だから私がやったことは、Idによる最初の注文と日付による後の注文のような2つの異なるコンテキストのorderByです:
var orderedArticles = db.Articles.OrderByDescending(a => a.Id).OrderByDescending(a => a.Date).ToList();
だからこの後、私は以下を持っています:
Id Title Date
11 Second Added Article 16/09/2009 00:00
10 First Added Article 16/09/2009 00:00
15 Old Article Added Later 15/09/2009 00:00
主な問題は、2009年9月16日のような日付フィールドを送信すると、時刻が00:00に設定され、これが問題になるためです。この状況。
解決
このコードは適切に見えます。 Dateフィールドの実際の内容を確認し、たとえばデータベースレベルでDateTimeオブジェクトのDateのみを設定しないようにしてください。これにより、特定の日付のすべてのDateTimeオブジェクトが00:00:00を指すようになります。したがって、LINQはそれらの並べ替え方法を知りません。
他のヒント
入力した回答(編集として質問に移動する必要がある)を見て、新しいOrderByではなくThenByを適用する必要があります:
var articles = db.Articles.OrderByDescending(a => a.Date).ThenBy(a => a.Id).ToList();
所属していません StackOverflow