按3个时间字段中的任何一个排序

时间:2015-07-01 02:21:46

标签: linq sorting datetime null-coalescing-operator

如果可以的话,这是一个双重问题。记录中指定了1-3个Arrive,Depart和Pass字段。我希望结果按任何时间排序,无论它们来自哪个实际列。下面的查询通过首先从00:00到23:59,然后从00:00到23:50的出发时间,然后从00:00到23:59的到达时间来排序所有内容。换句话说,我得到三个“块”的记录,而我想要这样的东西:

            Arr  Dep   Pass
1st result       00:01
2nd result 00:02
3rd result             00:03
4th result       23:58
5th result 23:59

问题的第二部分是三个字段都可以为空,我只需要DateTime的时间部分?领域。日期部分未定义,可能是伪随机的。如果我采用null字段的Value.TimeOfDay,那么我将得到一个AV。合并运算符将在field.Value上工作,但它会传递field.Value而不是field.Value.TimeOfDay,它是我需要的DateTime部分。

那么,请帮助我修复我的查询以对DateTime的非空时间部分进行排序?感谢。

查询的一部分:

        var results = from sl in db.WttScheduleLocations
                      orderby sl.Arrive.Value.TimeOfDay, sl.Depart.Value.TimeOfDay, sl.Pass.Value.TimeOfDay
                      select sl;

模特的一部分:

public class WttScheduleLocation
{
    public int Id { get; set; }
    public DateTime? Arrive { get; set; }
    public DateTime? Depart { get; set; }
    public DateTime? Pass { get; set; }
}

1 个答案:

答案 0 :(得分:0)

尝试此查询

var results = from sl in db.WttScheduleLocations
    orderby sl.Arrive.HasValue??sl.Arrive.Value.TimeOfDay descending
    orderby sl.Depart.HasValue??sl.Depart.Value.TimeOfDay descending
    orderby sl.Pass.HasValue??sl.Pass.Value.TimeOfDay descending
                      select sl;