Linq OrderByDescending, null first
У меня есть поле в моей базе данных, которое содержит DateTime?. Я хотел бы отсортировать результаты так, чтобы нули отображались вверху, а затем по убыванию по дате и времени, например,
null
null
2012-04-01
2012-01-01
2011-09-04
причина в том, что я смотрю на даты истечения срока действия, хотя некоторые записи не истекают.
5 ответов:
вы можете вернуть дата и время.Максвеллову вместо
null
из выражения упорядочения, поэтому строки сnull
даты сортируются сначала:yourData.OrderByDescending(row => row.dateTimeField ?? DateTime.MaxValue);
Я нахожу наиболее простой подход, чтобы быть:
data.OrderBy(Function(o) o.myDate IsNot Nothing).ThenByDescending(Function(o) o.myDate)
В C# я думаю...
data.OrderBy(o => o.myDate != null).ThenByDescending(o => o.myDate)
Это также будет работать с LINQ to SQL. Я не уверен, если
if(nullable, value)
успешно переведет на SQL.
вы могли бы попробовать что-то вроде этого:
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));
это более "очевидно правильно", чем" вероятно, будет суперэффективным", но это, по крайней мере, отправная точка.
посмотри блог Дэвида Остеррайха:
var queryResult = orderedProducts from enumerableProducts order by orderedProducts.ProductName, orderedProducts.Price != null ? 1 : 0 descending, orderedProducts.Price select orderedProducts;