2013-07-10 2 views
1

Я получаю сообщение об ошибке при выполнении этого запроса:Linq запрос для TOP 11-20

Метод «Пропустить» поддерживается только для отсортированного ввода в LINQ для лиц. Метод «OrderBy» должен быть вызван до метода «Пропустить».

var data = (from xx in VDC.SURVEY_EMAIL_BLAST 
       where xx.USER_ID == userid 
       orderby xx.ID 
       select xx.TEMPLATE_ID).Distinct().Skip(10).Take(10)); 

На самом деле, я уже использую OrderBy в этом query.But, я получаю сообщение об ошибке.

+0

Что Ошибка? –

+3

Мое предположение: вам нужно 'OrderBy (...)' между 'Distinct()' и 'Skip()' – Basuro

+1

@DonatasK. Именно в этом вопросе: «Метод« Пропустить »поддерживается только для отсортированного ввода в LINQ to Entities. Метод «OrderBy» должен быть вызван до метода «Skip'.» – DGibbs

ответ

6

Попробуйте указать OrderBy до того Skip, как это:

var data = (from xx in VDC.SURVEY_EMAIL_BLAST 
      where xx.USER_ID == userid 
      select xx.TEMPLATE_ID).Distinct() 
            .OrderBy(x => x) 
            .Skip(10).Take(10)); 
+0

Из-за проекции ('select xx.TEMPLATE_ID') первый запрос возвращает набор int. Наверное, вы не можете заказать его с помощью .ID. –

+0

@WiktorZychla - правильный. Я исправил свой ответ. –

-1

Попробуйте

data = (from xx in VDC.SURVEY_EMAIL_BLAST 
          where xx.USER_ID == userid 
          orderby xx.ID 
          select xx.TEMPLATE_ID).Distinct().Skip(10).Take(10); 

    data1=data.ToList(); // it will fetch only 11-20. 
+1

-1 потому что это семантически очень отличается. Он будет извлекать * все * элементы из базы данных в память. –

+1

Это отбросит все из БД, а затем сделает «LIMIT» в памяти, а не в базе данных. Этот запрос может взорваться на очень большом столе. –

+0

Ваше обновление выдает точно такое же исключение, как и тот, с которым сталкивается OP. –

4

Это говорит вам, что именно не так, и что с этим делать:

var data = (from xx in VDC.SURVEY_EMAIL_BLAST 
           where xx.USER_ID == userid 
           orderby xx.ID 
           select xx.TEMPLATE_ID) 
      .Distinct() 
      .OrderBy(x => x) 
      .Skip(10) 
      .Take(10)); 
Смежные вопросы