Linq OrderByDescending具有两个可为空的日期列 [英] Linq OrderByDescending with two nullable date columns

查看:269
本文介绍了Linq OrderByDescending具有两个可为空的日期列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个表,其中有两个可为null的datetime列,即ETA和ETD.一个人总是有价值的.我想按日期排序表格.因此,例如,如果ETA为空,则使用ETD进行排序.如果ETD为空,则使用ETA;如果两者都不为空,则使用ETA(因为它始终是第一个).

I have a table with two nullable datetime columns, ETA and ETD. One always has a value. I want to order the table by date. So for example if ETA is null use ETD to order. If ETD is null use the ETA, if both are not null use ETA (as it's always first).

我有这个:

var route = db.RouteJourney.Where(j => j.JourneyId == id).OrderByDescending(j => j.ETA ?? j.ETD);

我也尝试过此操作(相同):

I've also tried this (which is the same):

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

我错过了什么吗?我的小脑袋说,如果ETA为空,请使用ETD,然后对其进行排序,但不会给出正确的结果.

Am I missing something? My small brain says that if ETA is null use ETD and then order it but it doesn't give the right result.

我们将为您提供任何帮助.

Any assistance is appreciated.

编辑

我正在得到这个:

如果RouteJourney为[名称,RouteId(密钥),JourneyId,ETA,ETD]

If RouteJourney is [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,空],[停止D,3、1、16/03/13,空]

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

订购如下:

停止C 站B 停止A 停止D

Stop C Stop B Stop A Stop D

谢谢...

推荐答案

尝试使用匿名类型

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

或者是QES的学前班:

Or pretier in 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;

这篇关于Linq OrderByDescending具有两个可为空的日期列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆