You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# LINQ排序DateTime?类型:将空值置于列表末尾

解决Nullable DateTime排序时Null值排在末尾的问题

这个问题我之前也碰到过,针对DateTime?(也就是可空日期类型)的排序要把Null值挪到列表末尾,其实有两种简单又靠谱的办法:

  • 方法一:先按是否有值分组排序,再按日期排序
    这种方法逻辑最清晰,完全不会和真实数据产生冲突:

    var reportsAscending = report
        .OrderBy(x => x.ApprovalAuditDate.HasValue ? 0 : 1)
        .ThenBy(x => x.ApprovalAuditDate)
        .ToList();
    

    原理很简单:先通过HasValue把数据分成两组,有值的标记为0,Null值标记为1,升序排序时0组会排在前面;之后再对有值的组按ApprovalAuditDate做正常的升序排序。

  • 方法二:用Null合并运算符替换Null值为极大日期
    如果你的业务数据里不会出现DateTime.MaxValue这个极端值,那这种写法更简洁:

    var reportsAscending = report
        .OrderBy(x => x.ApprovalAuditDate ?? DateTime.MaxValue)
        .ToList();
    

    原理是把Null值替换成DateTime类型的最大值,升序排序时这个最大值自然会排在所有正常日期的后面。不过要注意,如果你的数据里真的存在等于DateTime.MaxValue的日期,那它会和Null值混在一起,所以这种方法适合确定没有该极端值的场景。

内容的提问来源于stack exchange,提问作者WKara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:21:03