2010-05-11 18 views
19

Qualcuno sa come restituire un elenco ordinato di stringhe con valori nulli? Ho qualcosa di simile:Come ordinare per colonna con valori null ultimi nell'entità framework

using(var context = new DomainEntities()) 
{ 
    var result = context.Users.OrderBy(u => u.LastName).ThenBy(u => u.FirstName); 
} 

Il mio problema è che questa query restituisce valori nulli prima di valori non nulli.

Qualche idea?

risposta

38

vorrei fare:

using(var context = new DomainEntities()) 
{ 
    var result = context.Users.OrderBy(u => u.LastName == null) 
           .ThenBy(u => u.LastName) 
           .ThenBy(u => u.FirstName == null) 
           .ThenBy(u => u.FirstName); 
} 

... che dovrebbe produrre ragionevole SQL.

+6

Quindi funziona, ma sono confuso sul motivo per cui funziona. Perché specificare LastName == null restituisce prima i valori non nulli? – devlife

+7

Perché 'false' ordina prima di' true'. –

+0

Il primo punto e virgola è un tipo -o (dopo il controllo di u.FirstName == null)? – WEFX

4

Non so se c'è qualche interruttore da poter capovolgere. In caso contrario, l'approccio dritto in avanti probabilmente sarebbe qualcosa sulla falsariga di

using (var context = new DomainEntities()) 
    { 
     var FirstPart = context.Users.Where(u => u.LastName != null); 
     var SecondPart = context.Users.Where(u => u.LastName == null); 
     var Result = FirstPart.Union(SecondPart); 
    } 
+2

Ciò produrrà SQL abbastanza brutto, ho il sospetto. –

+0

Definisci brutto :) In realtà, non sarà così male come si potrebbe pensare - per SQL Server 2008, EF trasforma qualcosa di simile in una singola istruzione db query. –

+0

Sarà una dichiarazione, sì, solo eccessivamente complicata. –

Problemi correlati