2015-01-09 4 views
6

異なった日時を扱いますSortingDirectiondescに設定されていると正常に動作します。しかし、ascに設定すると、レコードが取得されません!注文SQL ServerにLINQでは、私は現在、EFオブジェクトの日時フィールドで注文しますLINQクエリへ順を追加しようとしています

SQL Server Profilerを見て、DateTimeオブジェクトのフォーマットが異なることが判明しました。 DESCについては

ORDER BY [Project1].[StartTime] DESC',N'[email protected]__linq__22='2015-01-07 09:00:23',@p__linq__23='2015-01-07 09:00:23',@p__linq__24='2015-01-07 09:05:30',@p__linq__25='2015-01-07 09:05:30' 

ASC用:

ORDER BY [Project1].[StartTime] ASC',N'[email protected]__linq__22='2015-07-01 09:00:23',@p__linq__23='2015-07-01 09:00:23',@p__linq__24='2015-07-01 09:05:30',@p__linq__25='2015-07-01 09:05:30' 

日と月は、SQLクエリが結果を返さないように引き起こして、入れ替わっています。私に

これは、IQueryable.OrderBy()方法はOrderByDescending()に正しいローカルフォーマット/異なるフォーマットを使用していないことを示唆している、これはEFのバグだろうか?

私の接続文字列には何かがありますが、これを強制するか、これらの日付で並べ替えることができる別の方法がありますか?

マイセットアップ:

  • .NET 4.5
  • Entity Frameworkの5.0.0
  • SQL Server 2012の標準

感謝

+1

どのように*特定*日時の値、 '2015-01-07'はorder by節に関係していますか? –

+0

[MVC DateTimeバインディングと不正な日付形式の可能な複製](http://stackoverflow.com/questions/528545/mvc-datetime-binding-with-incorrect-date-format) – user2831628

答えて

2

あなたのLINQを表示しませんしかし、すぐに2つのことが考えられます。まず、SQL Serverには独自のグローバリゼーション設定があります。また、日付がパラメタ化されている場合(linqは常にそうする必要があります)、日付文字列の形式を気にする必要はありません。

0

私はSQLやEFとは関係がないので、問題はMvcです。私はWeb.Configの文化を不変の文化( 'en')に設定していませんでした。これにより、フィルタ設定(この場合はProcessorStartTime)がUS日付文字列として解析されました。設定にカルチャが設定されていないと.NETがen-USにデフォルト設定されているように見えます(question参照)。

結果セットをソートしようとするまで、これは表示されませんでした。フィルタ条件がProcessorStartTimeのソートボタンに新しいMvcHtmlStringリンクが作成されます。これは、日付文字列を解析し、日と月を逆転させました。私はリンクをクリックしたときに何も結果を返さないように並べ替えを引き起こしので、LINQに流れ落ち、とされているとして、それが(バックDateTimeにMVCの日付処理in this questionの詳細情報をparsesdます。

OrderByDescending()が働いていた理由ソートボタンは、| asc | descのトグルトグルであるため、日数と月数を元に戻しました。

今後の参照用に、あなたのWeb設定にこのセットがあることを確認してください私はこれをSOの新しい何ものでもないので、重複しているとマークしています。ありがとうございました(esp。あなたはサイロン、それは正しい方向に私を指摘しました^^)

関連する問題