在Linq中订购实体多列

Val*_*sse 5 c# linq-to-entities entity-framework

我在SQL Server中有一个表,其中包含以下列

  • ID(身份/主键)
  • DestinationID(外键)
  • 日期(日期字段)
  • 时间(时间场)
  • DayOfWeek(Char(3)Field)即"MON","TUE"等.

我想按日期和时间订购数据,然后按DayOfWeek和Time订购数据.因此,所有带日期的记录都显示在顶部,按时间排序,然后是按时间排序的DayOfWeek.

我已经尝试了几种方法,但只是无法理解它,我有以下代码

    var qry = ctx.DestinationTimings.Where(x => x.DestinationID == this.ID)
                     .OrderBy(t => t.Date).ThenBy(t => t.Date != null)
                     .ThenBy(t => SqlFunctions.CharIndex(t.DayOfWeek + ",", "MON,TUE,WED,THU,FRI,SAT,SUN"))
                     .ThenBy(t => t.Time);
Run Code Online (Sandbox Code Playgroud)

dza*_*ala 15

如果可以Date为空,你可以这样做:

var qry = ctx.DestinationTimings.Where(x => x.DestinationID == this.ID)
                 .OrderBy(t => t.Date ?? DateTime.MaxValue)
                 .ThenBy(t => SqlFunctions.CharIndex(t.DayOfWeek + ",", "MON,TUE,WED,THU,FRI,SAT,SUN"))
                 .ThenBy(t => t.Time);
Run Code Online (Sandbox Code Playgroud)