2011-09-30 11 views
6

Speriamo che sia una semplice questione di non capire qualcosa di base. Di seguito sono riportate due istruzioni Linq da un'applicazione a cui sto lavorando.Linq, OrderByDescending, First, e il nefasto 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 è un insieme che contiene due oggetti Periodo, ciascuno con un unique UID.

Secondo quanto ho capito, p1 e p2 dovrebbero essere uguali.

Nel mio ambiente, tuttavia, non lo sono.

p1 è corretto (vale a dire è uguale all'oggetto Periodo con l'UID più grande nell'insieme).

p2, tuttavia, non è corretto (vale a dire è uguale all'altro periodo nell'insieme).

Qualche idea?

risposta

8

DefaultIfEmpty() su LINQ to Entities non garantisce di mantenere l'ordine stabilito da OrderByDescending(), (vedi anche here) l'ordine dovrebbe sempre essere l'ultima ed è per questo il primo caso funziona - ma non si deve usare sia a mio parere - questo è esattamente ciò che FirstOrDefault() è per:

EDMXModel.Classes.Period p1 = entities.Periods 
             .OrderByDescending(ap => ap.UID) 
             .FirstOrDefault(); 
Problemi correlati