2012-12-06 54 views
5

我在SQL Server中的表有以下幾列排序在LINQ到實體多列

  • ID(身份/主鍵)
  • 目標-ID(外鍵)
  • 日期(日期字段)
  • 時間(時間域)
  • DAYOFWEEK(CHAR(3)場),即 「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); 
+1

使用選擇方法(http://msdn.microsoft.com/en-us/library/system.linq.enumerable.select.aspx) –

+0

我確實看過select方法,但我認爲它會有點超過頂部,我有一個傾斜,這將是簡單的事情 – Valeklosse

+1

@Kiquenet'SqlFu nctions.CharIndex'將返回在另一個表達式中找到的值的位置。 https://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions.charindex(v=vs.110).aspx – Valeklosse

回答

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);