Linq OrderByDescending,首先为null

tof*_*tim 60 c# linq

我的数据库中有一个包含DateTime的字段?我想对结果进行排序,以便NULL显示在顶部,然后按DateTime降序,例如,

null
null
2012-04-01
2012-01-01
2011-09-04
Run Code Online (Sandbox Code Playgroud)

原因是我正在查看到期日期,但有些条目没有到期.

Fré*_*idi 156

您可以返回DateTime.MaxValue而不是null从排序表达式返回,因此具有null日期的行首先排序:

yourData.OrderByDescending(row => row.dateTimeField ?? DateTime.MaxValue);
Run Code Online (Sandbox Code Playgroud)


小智 29

我发现最直接的方法是:

data.OrderBy(Function(o) o.myDate IsNot Nothing).ThenByDescending(Function(o) o.myDate)
Run Code Online (Sandbox Code Playgroud)

在C#我认为......

data.OrderBy(o => o.myDate != null).ThenByDescending(o => o.myDate)
Run Code Online (Sandbox Code Playgroud)

这也适用于LINQ to SQL.我不确定是否if(nullable, value)会成功转换为SQL.

  • 如果其他人有同样的问题,`.OrderBy(o => o.myDate != null)` 不会从集合中删除空值。它仅对集合进行排序。 (2认同)