2009-07-10 10 views
21

Ho iniziato a utilizzare Linq su SQL per un progetto su cui sto lavorando e ho riscontrato un problema durante l'ordinazione da un campo DateTime ma poiché DateTime consente i valori null i valori nulli sono inferiori a le date attuali in là.Ordinamento di DateTime nullable in Linq su SQL

Quindi voglio praticamente che quelli con una data siano in cima (ordinati in entrambi i casi), quindi tutti quelli senza data impostata.

jobList = from ju in context.Job_Users_Assigned 
      where ju.UserID == user.ID 
      select ju.Job; 
return jobList.OrderByDescending(j => j.EndDate); 

risposta

45

Questo è un po 'di un hack, ma sembra di lavorare con LINQ to SQL:

return from ju in context.Job_Users_Assigned 
      where ju.UserID == user.ID 
      orderby ju.Created ?? DateTime.MaxValue descending; 

così sto sostituendo il massimo valore possibile DateTime quando l'attuale "Crea" il valore è nullo. Questo metterà tutti i valori nulli in cima.

Un altro approccio consiste nell'ordinare se il campo data ha un valore. Questo funziona anche:

return from ju in context.Job_Users_Assigned 
      where ju.UserID == user.ID 
      orderby ju.Created.HasValue descending 
      orderby ju.Created descending; 
+3

Io non sono in grado di mettere il dito sul perché esattamente, ma trovo la tua seconda soluzione molto bella –

+0

Guardando la questione ancora una volta, è un po 'ambigua sul fatto che il richiedente vuole il nulla valori prima o no (dice che non lo fa, ma poi ordina la query decrescente). In ogni caso è un piccolo passo da uno di questi snippet di codice a ciò che vuole. –

+0

Grazie matt questo è esattamente quello che stavo cercando. e per quanto riguarda l'ordine questo era solo un esempio, devo ordinarlo in altri modi in posti diversi ma i valori nulli sono sempre gli ultimi. – dkarzon