2013-06-26 5 views
1

, используя следующий запросрезультатов порядковых Linq запроса по нескольким пунктам

Dim allEvents As New List(Of Events) 
Dim digits = "1 2 3 4 5 6 7 8 9 0".Split() 
Dim results = (From t In ctx.events 
          Where t.date = todaysdate.Date AndAlso 
          Not digits.Any(Function(d) (t.symbol.Contains(d))) 
          Order By t.time 
          Select New With { 
            t.symbol, 
            t.date, t.time, 
            t.description, 
            t.domestic_call_num, 
            t.web_url}) 

      If results.Count > 0 Then 
       For x As Integer = 0 To results.Count - 1 
        Dim newevent As New Events 
        With newevent 
         .CompanySymbol = results(x).symbol 
         .EventDate = results(x).date 
         .EventTime = Left(results(x).time.ToString(), 5) 
         .EventDescription = results(x).description 
         If results(x).domestic_call_num IsNot Nothing Then 
          .DialInNumber = results(x).domestic_call_num 
         Else 
          .DialInNumber = "" 
         End If 
         If results(x).web_url IsNot Nothing Then 
          .WebCastUrl = results(x).web_url 
         Else 
          .WebCastUrl = "" 
         End If 
        End With 
        allEvents.Add(newevent) 
       Next 
       Return allEvents 

Я получаю результаты, я хочу, но я хотел бы дополнительно заказать их по описанию и время

Я попытался следующим , который должен был работать

Dim results = (From t In ctx.events 
          Where t.date = todaysdate.Date AndAlso 
          Not digits.Any(Function(d) (t.symbol.Contains(d))) 
          Order By t.time 
          Group By t.description 
          Select New With { 
            t.symbol, 
            t.date, t.time, 
            t.description, 
            t.domestic_call_num, 
            t.web_url}) 

Я также попробовал ThenBy, который компилятор не понравился. Любая помощь в том, как добиться этого, будет оценена по достоинству. По сути, я хочу порядок сортировки времени, затем описание, затем символ.

ответ

2

При использовании интегрированного синтаксиса, вы бы написать это как:

Order By t.time, t.description 
Select New With { 
    ... 

Для получения дополнительной информации см Query Expression Examples for ThenBy.

+0

Рид, Вот как я изначально написал его, так как ему ДОЛЖНО работать именно так. При одном заказе By, t.time, я не заполняю список событий без проблем. Как только я добавлю второй, t.description код barfs в первом прогоне через событие добавления. См. Редактирование к моему оригинальному сообщению для получения дополнительного кода. – dinotom

+0

@ dinotom. Как я написал выше, должен работать отлично. Это единственный «Order By» с «t.time, t.description» в списке, разделенным запятой. –

+0

Я удалил .ToList(), чтобы попытаться выполнить оригинальный запрос. У меня теперь все работает, ty – dinotom

1

Вы можете попробовать заказывать ваши детали в конце запроса, как, что:

Dim results = (From t In ctx.events 
         Where t.date = todaysdate.Date AndAlso 
         Not digits.Any(Function(d) (t.symbol.Contains(d))) 
         Select New With { 
           t.symbol, 
           t.date, t.time, 
           t.description, 
           t.domestic_call_num, 
           t.web_url}).OrderBy(Function(r) r.time) 
             .ThenBy(Function(r) r.description) 

Это, вероятно, быстрее, чтобы сделать это в Тхо запроса.

+1

Скорость будет одинаковой - это должно быть переведено на тот же запрос на сервере, что и моя версия (ее просто сложнее читать) –

+0

О, хорошо знать, но я согласен с тем, что ваш ответ легче читать. –