2009-07-10 32 views
21

Comencé a usar Linq a SQL para un proyecto en el que estoy trabajando y me encontré con un problema al ordenar por un campo DateTime pero dado que DateTime permite nulos los nulos aparecen como menos que las fechas reales allí.Ordenando fecha y hora anulables en Linq a SQL

Por lo tanto, quiero que los que tienen una fecha para estar en la parte superior (ordenados de cualquier manera), luego todos los que no tienen fecha establecida.

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

Respuesta

45

Esto es un poco de un truco, pero parece trabajar con LINQ to SQL:

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

Así que estoy sustituyendo el valor máximo posible DateTime cuando el actual "Crear" es el valor nulo. Eso pondrá todos los valores nulos en la parte superior.

Otro enfoque consiste en ordenar si el campo de fecha tiene un valor. Esto funciona también:

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

estoy no puedo poner mi dedo sobre por qué exactamente, pero me parece que su segunda solución bastante bonito –

+0

En cuanto a la pregunta de nuevo, que es un poco ambigua en cuanto a si el autor de la pregunta quiere que la nula valores primero o no (él dice que no, pero luego ordena que la consulta descienda). De cualquier manera, es un pequeño paso desde cualquiera de estos fragmentos de código hasta lo que quiere. –

+0

Gracias mate eso es exactamente lo que estaba buscando. y en cuanto al orden, esto fue sólo un ejemplo, tengo que pedirlo de otras maneras en diferentes lugares, pero los valores nulos son siempre los últimos. – dkarzon

Cuestiones relacionadas