문제

Hopefully this is a simple matter of me not understanding something basic. Below are two Linq statements from an application I'm working on.

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 is a set containing two Period objects, each with a unique UID.

According to everything I understand, p1 and p2 should be the same.

In my environment, however, they are not.

p1 is correct (i.e. it is equal to the Period object with the largest UID in the set).

p2, however, is not correct (i.e. it is equal to the other Period in the set).

Any ideas?

도움이 되었습니까?

해결책

DefaultIfEmpty() on Linq to Entities does not guarantee to maintain the order established by OrderByDescending(), (also see here) the order should always be last and that is why the first case works - but you shouldn't use either in my opinion - this is exactly what FirstOrDefault() is for:

EDMXModel.Classes.Period p1 = entities.Periods
                                      .OrderByDescending(ap => ap.UID)
                                      .FirstOrDefault();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top