2012-12-06 19 views
5

私は、次の列エンティティへのLINQで注文複数列

  • ID(アイデンティティ/主キー)
  • DestinationID(外部キー)
  • 日(日付フィールドを持つSQL Serverのテーブルを持っています)
  • 時間(フィールド)
  • のDayOfWeek(CHAR(3)フィールド)すなわち "MON"、 "TUE" など。

データを日付と時間、次にDayOfWeekと時間で並べ替える必要があります。したがって、日付を含むすべてのレコードが上部に表示され、時間順に、次に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

Selectメソッドを使用します(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がNULL可能である場合は、このような何か行うことができます:

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); 
関連する問題