6

うまくいけば、これは私が基本的なことを理解していないという単純な問題です. 以下は、私が取り組んでいるアプリケーションからの 2 つの Linq ステートメントです。

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 は、2 つの Period オブジェクトを含むセットで、それぞれにunique UID.

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

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

p1 は正しいです (つまり、セット内で最大の UID を持つ Period オブジェクトと同じです)。

ただし、p2 は正しくありません (つまり、セット内の他の期間と同じです)。

何か案は?

4

1 に答える 1

8

DefaultIfEmpty()Linq to Entities では、によって確立された順序を維持することは保証されません(こちらOrderByDescending()も参照してください)。順序は常に最後にする必要があり、それが最初のケースが機能する理由です。ただし、私の意見ではどちらも使用しないでください。これはまさに為に:FirstOrDefault()

EDMXModel.Classes.Period p1 = entities.Periods
                                      .OrderByDescending(ap => ap.UID)
                                      .FirstOrDefault();
于 2011-09-30T19:42:20.460 に答える