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

C# LINQ实现日期降序同日期时间降序排序问题求解

问题根因

当前代码日期排序逻辑正确,但同日期下的时间排序调用的是ThenBy()方法,该方法执行的是升序排列,和要求的时间降序规则相反,因此同日期条目会按时间从早到晚排序,不符合预期。

修复方案

最小改动修正原有逻辑

只需要把时间排序的方法从升序的ThenBy替换为降序的ThenByDescending即可:

List<some> orderedData = data
    .OrderByDescending(c => c.ModifiedOn.Date)
    .ThenByDescending(c => c.ModifiedOn.TimeOfDay)
    .ToList();

更简洁的优化写法

DateTime类型原生支持完整的时间先后比较,比较时默认先判断日期部分、日期相同再判断时间部分,因此不需要手动拆分日期和时间字段,直接对整个ModifiedOn字段做降序排序就能实现完全一致的效果,代码更简洁、执行效率也更高:

List<some> orderedData = data
    .OrderByDescending(c => c.ModifiedOn)
    .ToList();

补充说明:如果ModifiedOn是可空的DateTime?类型,可根据空值排序需求补默认值,比如需要把空时间条目排到最后,可以写成c => c.ModifiedOn ?? DateTime.MinValue。

用上述代码排序后,输出顺序符合日期、时间双降序的要求,和样例输入对应的正确排序结果完全匹配:

11/19/2021 9:04:39 PM
11/19/2021 8:54:39 PM
11/18/2021 10:29:39 PM
11/18/2021 8:44:39 PM
11/17/2021 8:26:39 PM

(注:你给出的预期输出中最后两条时间数值和输入不一致,属于笔误,排序逻辑本身符合需求规则)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:18:17