Linq orderby降序与两个可空的日期列

本文关键字:两个 日期 降序 orderby Linq | 更新日期: 2023-09-27 18:02:26

我有一个表,有两个可空的日期时间列,ETA和ETD。人总是有价值的。我想按日期订这张桌子。例如,如果ETA为空,使用ETD来订购。如果ETD为空,则使用ETA,如果两者都不为空,则使用ETA(因为它总是在前面)。

我有这个:

var route = db.RouteJourney.Where(j => j.JourneyId == id).OrderByDescending(j => j.ETA ?? j.ETD);

我也试过这个(这是相同的):

var route = db.RouteJourney.Where(j => j.JourneyId == id).OrderByDescending(j => j.ETA.HasValue ? j.ETA : j.ETD);

我错过了什么吗?我的小脑袋说,如果ETA是空的,使用ETD,然后订购它,但它没有给出正确的结果。

感谢您的帮助。

编辑

我明白了:

如果RouteJourney是[Name, RouteId (Key), JourneyId, ETA, ETD]

和值为:

[停止,1,1,null, 10/03/13],[停止B 4 1 12/03/13 13/03/13],[停止C 2 1 14/03/13 null],[停止D、3、1 16/03/13 null]

命令如下:

停止C停止B停止停止D

谢谢…

Linq orderby降序与两个可空的日期列

尝试使用匿名类型

var route = 
    db.RouteJourney
    .Where(j => j.JourneyId == id)
    .OrderByDescending(item =>
        (new { DT = item.ETA.HasValue ? item.ETA : item.ETD }).DT);     

或在QES中更漂亮:

var route =
    from item in db.RouteJourney
    where item.JourneyId == id
    order by
        (new { DT = item.ETA.HasValue ? item.ETA : item.ETD }).DT
    descending
    select item;