Linq OrderByDescending,null为空
我在我的数据库中有一个字段包含DateTime ?. 我想对结果进行sorting,使NULL显示在顶部,然后按DateTime递减,例如,
null null 2012-04-01 2012-01-01 2011-09-04
原因是我在看过期date,虽然有些条目不会过期。
您可以从sortingexpression式中返回DateTime.MaxValue而不是null
,所以具有null
date的行首先被sorting:
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 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));
这更“明显正确”,而不是“超高效”,但这至less是一个起点。
看看David Oesterreich的博客:
var queryResult = orderedProducts from enumerableProducts order by orderedProducts.ProductName, orderedProducts.Price != null ? 1 : 0 descending, orderedProducts.Price select orderedProducts;
像上面的接受版本,但与C#V6的语法
tickets.OrderByDescending(x => x?.Erstellt ?? DateTime.Now)