2011-09-03 14 views
49

Tengo un campo en mi base de datos que contiene un DateTime ?. Me gustaría ordenar los resultados para que los nulos aparecen en la parte superior, para luego descender por DateTime, por ejemplo,Linq OrderByDescending, null first

null 
null 
2012-04-01 
2012-01-01 
2011-09-04 

La razón es que estoy mirando las fechas de caducidad, aunque algunas entradas no caducan.

+0

Me pareció que para ser una mejor solución si no es un http fecha y hora: // stackoverflow.com/a/15247558/59508 – kiev

Respuesta

125

Puede volver DateTime.MaxValue en lugar de null de la expresión de pedido, por lo que las filas con null fechas se ordenan en primer lugar:

yourData.OrderByDescending(row => row.dateTimeField ?? DateTime.MaxValue); 
+0

Gran solución. –

2

usted podría intentar algo como esto:

var nulls = table.Where(x => x.NullableDateTimeField == null); 
var notNulls = table.Where(x => x.NullableDateTimeField != null); 

var result = nulls.Concat(notNulls.OrderByDescending(x => x.NullableDateTimeField)); 

Es más "obviamente correcta" que "probablemente sea súper eficiente", pero es, al menos, un punto de partida.

+0

Falta una cláusula de pedido. –

25

me parece el método más sencillo para ser:

data.OrderBy(Function(o) o.myDate IsNot Nothing).ThenByDescending(Function(o) o.myDate) 

en C# Creo que ...

data.OrderBy(o => o.myDate != null).ThenByDescending(o => o.myDate) 

Esto también funcionará con LINQ to SQL. No estoy seguro de si if(nullable, value) se traducirá correctamente a SQL.

0

Tome un vistazo a David Oesterreich's blog:

var queryResult = 
orderedProducts from enumerableProducts 
order by orderedProducts.ProductName, 
orderedProducts.Price != null ? 1 : 0 descending, 
orderedProducts.Price 
select orderedProducts; 
1

como la versión aceptada anteriormente, pero con la sintaxis de C# v6

tickets.OrderByDescending(x => x?.Erstellt ?? DateTime.Now) 
+1

Le pido que por favor agregue más contexto alrededor de su respuesta. Las respuestas de solo código son difíciles de entender. Ayudará al solicitante y a los lectores futuros tanto si puede agregar más información en su publicación. – RBT