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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With