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
谢谢…
尝试使用匿名类型
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;