1

ETA と ETD の 2 つの null 可能な日時列を持つテーブルがあります。人には必ず価値があります。テーブルを日付順に並べたい。たとえば、ETA が null の場合、ETD を使用して注文します。ETD が null の場合は ETA を使用し、両方が null でない場合は 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がnullの場合は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、ヌル]、[ストップD、3、1、16/03/13、ヌル]

このように注文しました:

ストップ 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 に答える