2012-12-06 7 views
5

У меня есть таблица в SQL Server, которая имеет следующие столбцызаказа в Linq к Entities нескольких столбцов

  • ID (Идентичность/Первичный ключ)
  • DestinationID (Внешний ключ)
  • Даты (Поле даты)
  • Время (Время поле)
  • DayOfWeek (Чар (3) поле), то есть "пН", "ВТ" и т.д ..

Я хочу заказать данные по дате и времени, затем по 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); 
Смежные вопросы