Linq OrderByDescending,null为空

我在我的数据库中有一个字段包含DateTime ?. 我想对结果进行sorting,使NULL显示在顶部,然后按DateTime递减,例如,

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

原因是我在看过期date,虽然有些条目不会过期。

您可以从sortingexpression式中返回DateTime.MaxValue而不是null ,所以具有nulldate的行首先被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)