首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Linq OrderByDescending,第一个为空

Linq OrderByDescending,第一个为空
EN

Stack Overflow用户
提问于 2011-09-03 13:52:43
回答 5查看 38.5K关注 0票数 70

我的数据库中有一个包含DateTime?的字段。我希望对结果进行排序,使空值显示在顶部,然后按DateTime降序,例如,

代码语言:javascript
复制
null
null
2012-04-01
2012-01-01
2011-09-04

原因是我正在查看过期日期,尽管有些条目不会过期。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-03 14:01:39

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

代码语言:javascript
复制
yourData.OrderByDescending(row => row.dateTimeField ?? DateTime.MaxValue);
票数 180
EN

Stack Overflow用户

发布于 2012-02-17 03:04:19

我发现最直接的方法是:

代码语言:javascript
复制
data.OrderBy(Function(o) o.myDate IsNot Nothing).ThenByDescending(Function(o) o.myDate)

在C#我认为..。

代码语言:javascript
复制
data.OrderBy(o => o.myDate != null).ThenByDescending(o => o.myDate)

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

票数 32
EN

Stack Overflow用户

发布于 2011-09-03 13:59:13

您可以尝试如下所示:

代码语言:javascript
复制
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));

它“显然是正确的”,而不是“可能是超级高效的”,但它至少是一个起点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7291435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档