2013-03-06 18 views
1

我有一個表有兩個可爲空的datetime列,ETA和ETD。一個人總是有價值的。我想按日期排序。因此,例如,如果ETA爲空,則使用ETD進行訂購。如果ETD爲空,則使用ETA,如果兩者都不爲空,則使用ETA(因爲它始終是第一個)。Linq OrderByDescending有兩個可爲空的日期列

我有這樣的:

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爲[名稱,路由ID(密鑰),JourneyId,ETA,ETD]

和值:

[停止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],[Stop D,3,1,16/03/13,null]

Ordered like this:

停止C 停止B 停止一個 停止d

謝謝...

回答

4

嘗試在QES使用匿名類型

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

或者pretier:

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; 
+0

謝謝,我已經嘗試過了,但它仍然生成相同的順序。我很困惑。 – user2083536 2013-03-06 12:52:19

+0

請不理我...我很蠢。我沒有看到2012年的數據結構。謝謝您的幫助。 – user2083536 2013-03-06 13:24:33