2011-09-30 9 views
6

これは基本的なことを理解していないのであれば簡単に問題ないと思います。以下は私が取り組んでいるアプリケーションからの2つのLinqステートメントです。Linq、OrderByDescending、First、および悪質なDefaultIfEmpty

EDMXModel.Classes.Period p1 = entities.Periods.DefaultIfEmpty(null).OrderByDescending(ap => ap.UID).First(); 

EDMXModel.Classes.Period p2 = entities.Periods.OrderByDescending(ap => ap.UID).DefaultIfEmpty(null).First(); 

entities.Periodsは、それぞれがunique UIDという2つの期間オブジェクトを含むセットです。

私が理解するすべてのことによると、p1とp2は同じでなければなりません。

しかし私の環境では、そうではありません。

p1が正しい(つまり、セット内で最大のUIDを持つPeriodオブジェクトに等しい)。しかし、p2は正しくありません(つまり、セット内の他の期間と同じです)。

アイデア?エンティティへのLINQの上

答えて

8

DefaultIfEmpty()は順序が常に最後でなければならず、最初のケースで動作します理由です(またhereを参照)、OrderByDescending()によって確立された秩序を維持するために保証するものではありません - しかし、あなたはどちらか私の意見では使用しないでください - これはまさにFirstOrDefault()の対象です:

EDMXModel.Classes.Period p1 = entities.Periods 
             .OrderByDescending(ap => ap.UID) 
             .FirstOrDefault(); 
関連する問題