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

C# Linq多值排序:带优先级的TimeSpan字段排序实现问题

正确实现代码
var tmpList = Persons
    // 先过滤掉两个时间字段都为0的无效元素
    .Where(x => x.OfficialTime > TimeSpan.Zero || x.Time > TimeSpan.Zero)
    // 按规则计算每个元素的排序键后统一升序排列
    .OrderBy(x => x.OfficialTime > TimeSpan.Zero ? x.OfficialTime : x.Time)
    .ToList();
原代码问题说明
  • 排序逻辑不符合规则:原代码强制先按OfficialTime字段排序,会导致OfficialTime为0的元素全部排到其他有有效值的OfficialTime元素之前,和“OfficialTime为0时用Time字段参与全局排序”的要求冲突
  • 执行顺序不合理:原代码先排序再过滤,虽然不会直接导致结果错误,但先过滤无效元素可以减少排序运算量,执行效率更高
结果验证

使用提供的测试数据执行上述代码,输出结果和预期完全匹配:

  • Person2 排序键为00:02:55(取OfficialTime)
  • Person3 排序键为00:02:56(OfficialTime为0,取Time)
  • Person5 排序键为00:02:57(取OfficialTime)
  • Person6 排序键为00:02:58(取OfficialTime)
  • Person1 排序键为00:03:01(取OfficialTime)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:27:01