1

我有一个包含两个可为空的日期时间列 ETA 和 ETD 的表。一个人总是有价值的。我想按日期订购表格。因此,例如,如果 ETA 为空,请使用 ETD 进行订购。如果 ETD 为空,则使用 E​​TA,如果两者都不为空,则使用 E​​TA(因为它始终是第一个)。

我有这个:

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]

和价值观是:

[Stop A, 1, 1, null, 10/03/13], [Stop B, 4, 1, 12/03/13, 13/03/13], [Stop C, 2, 1, 14/03/ 13, null], [D 站, 3, 1, 16/03/13, null]

像这样订购:

停止 C 停止 B 停止 A 停止 D

谢谢...

4

1 回答 1

4

尝试使用匿名类型

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;
于 2013-03-06T12:36:33.670 回答