2012-12-06 12 views
5

Mam tabelę w programie SQL Server, który ma następujące kolumnyKolejność w Linq podmiotom wielu kolumn

  • tożsamości (Identity/Primary Key)
  • DestinationID (Klucz obcy)
  • Data (Date Pole)
  • (czas Pole)
  • DzienTygodnia (Char (3) Pole) czyli "MON", "TUE" etc ..

Chcę zamówić dane według daty i czasu, a następnie według dni tygodnia i czasu. Tak więc wszystkie rekordy z datami pojawiają się u góry i uporządkowane według czasu, a następnie według kolejności DayOfWeek.

Próbowałem kilka sposobów, ale po prostu nie mogę uzyskać moja głowa wokół niego, mam następujący kod

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

Zastosowanie Wybierz metodę (http://msdn.microsoft.com/en-us/library/system.linq.enumerable.select.aspx) –

+0

Spojrzałem na metodę select, ale myślę, że byłoby to trochę przesadzone, miał nachylenie byłoby coś prostego – Valeklosse

+1

@Kiquenet 'SqlFu nctions.CharIndex' Zwróci pozycję wartości znalezionej w innym wyrażeniu. https://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions.charindex(v=vs.110).aspx – Valeklosse

Odpowiedz

15

Jeśli Date jest pustych mógłby zrobić coś takiego:

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