如果可以的话,这是一个双重问题。记录中指定了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; }
}
答案 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;