我有一个包含两个可以为空的日期时间列,ETA和ETD的表。一个人总是有价值。我想按日期订购表格。因此,例如,如果ETA为null,则使用ETD进行排序。如果ETD为null,则使用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]
和值是:
[停止A,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. 停止A. 停止D
...谢谢
答案 0 :(得分: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;