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

如何使用LINQ按多列组合值对Orders表按最后交互时间排序

解决方案

核心逻辑是直接将「最后交互时间」作为排序字段:如果Modified有值则取Modified,为空则取Created,直接对该合并后的字段升序排序即可。

C# LINQ 写法

直接用空合并运算符构造排序字段:

orders.OrderBy(o => o.Modified ?? o.Created)

逻辑验证

对示例数据的计算结果如下:

  • 订单4:Modified为空,取Created = 2019-01-10
  • 订单3:取Modified = 2019-02-25
  • 订单1:Modified为空,取Created = 2019-12-24
  • 订单2:取Modified = 2020-01-10

按上述时间升序排序后的顺序正好是 4、3、1、2,完全符合预期。

补充说明

如果用的是不支持空合并运算符的旧版ORM框架,也可以用三元表达式实现等价逻辑:

orders.OrderBy(o => o.Modified.HasValue ? o.Modified : o.Created)

两种写法在EF Core等主流ORM中都会被正确翻译成对应的SQL语句(比如SQL Server里的ISNULL(Modified, Created)、MySQL里的IFNULL(Modified, Created)),无需担心性能问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:36:03