2009-09-16 18 views
5

Dateによって結果を並べ替えるのが難しいです。特別な方法はありますか? 私は今、この権利をやっているので:日付が日時フィールドでASP.NET MVC - Model.OrderBy日付は無効です

var db = new DB(); 
var articles = db.Articles; 
var orderedArticles = articles.OrderBy(a => a.Date); 
return View(orderedArticles.ToList()); 

を。 そしてだから私は何が起こっているかをチェックするために管理のOrderBy(..)またはOrderByDescending(..)

ため影響はありません。 :

var orderedArticles = db.Articles.OrderByDescending(a => a.Date).ToList(); 

私は

を持つことになり、私はちょうど私が両方例えば同じ日のための2つの記事を持っている場合はそう ない時間に日付を使用している新しい記事を追加

毎回

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 

これは、日付でフィルタリングされていることがわかりますが、同じ日付のときにソートがフォーカスを失います。 だから私は日によって同上以降順序によって一次のようなものである、[並べ替え二つの異なるコンテキストやった:

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 

を私は本当に知りません主な問題は、16/09/2009のような日付フィールドを送信すると時刻が00:00に設定され、これがこの状況に問題であるためです。

+0

申し訳ありません - 私は持っていませんでした日付が日時フィールドであると仮定して、日付のソートに関する問題。たぶん、あなたのデータベースのタイプ/バージョンに関してより具体的になるかもしれませんか? –

+0

OrderByを移動してみてください。 Do:ビュー(articles.ToList()。OrderBy(a => a.Date))を返します。あなたがしていることは正しく見えますが、これはデータベースを方程式から取り除き、Linqをオブジェクトの並べ替えに使用するだけです。これが機能するなら、並べ替えはlinqクエリで起こっていません。 – anonymous

答えて

6

このコードはよさそうです。 Dateフィールドに実際に何が含まれているかを確認し、データベースレベルでDateTimeオブジェクトのDateを設定するだけでなく、特定の日付のすべてのDateTimeオブジェクトが00:00:00を指すようにします。したがって、LINQはそれらを並べ替える方法を知らないでしょう。

+0

こんにちはRobbanはあなたの言ったとおりです、私は私の質問を編集しました。しかし、敷居、私はこれが正しい方法であるかどうかはわかりません。助けてくれてありがとう – zanona

6

(FYI編集と疑問に移動する必要があります)あなたが提供する答えを見て、あなたはかなり新しいのOrderByよりも、ThenByを適用すべきでは:

var articles = db.Articles.OrderByDescending(a => a.Date).ThenBy(a => a.Id).ToList(); 
+0

ThenBy()メソッドのDanのおかげで、これはすごくいいですね。 – zanona

関連する問題