0

今日、Linq + ラムダを使用してリストを並べ替えているときに、奇妙なことが起こりました。フィールド c => c.Statistics.Created で OrderedByDescending にする必要がある記事のリストがあります。このフィールドは DateTime として返されます。私は次のことを行います:

newsItems = newsItems.OrderByDescending(c => c.Statistics.Created).ToArray<Item>(); 

このリストは降順で並べられることと、これは単なる DateTime オブジェクトであるため、この日付の時刻も監視されていることを理解しています。今奇妙な部分。コードを次のように調整します。

 newsItems = newsItems.OrderByDescending(c => c.Statistics.Created.Date).ToArray<Item>();  

リストを見ると、アイテムはまだ正しい順序になっています。Linq に日付のみを表示するように指示したときに、なぜリストがまだ正しい順序で並べられているのか理解できません。どういうわけか、Linq も時間を見ることにしました。アプリケーションを w3p プロセスにアタッチして何が起こるかを観察すると、予想どおり、Date オブジェクトの Time が実際には空であることがわかります。linqに日付のみを表示するように指示したときに、このリストが実際に時間どおりにソートされる方法を誰かが説明できますか?

もう解決!

この奇妙な動作が発生した原因はすでにわかっています。それは、(CMS から取得した) リストが既に何らかの方法で順序付けられていたということでした。次に、日付で(時間なしで)並べ替えたとき、順序は明らかに正しいため、Linqはこの日付で他に何もしませんでした。

4

0 に答える 0