2013-08-08 2 views
0

У меня есть большой объем данных в базе данных. Я хочу отфильтровать результат и получить определенный номер продуктаlinq limit и filter большой набор результатов

Например: PageSize = 100. я хочу, чтобы получить 100 продуктов на каждой странице, и описание этого продукта содержит строку «ноутбук»

Products = repository.Products 
      .OrderByDescending(p => p.Date) 
      .Where(x=>x.Description.Contains("%Laptop%") 
      .Skip((page - 1) * PageSize) 
      .Take(PageSize); 

Этого запрос истек, так как запрос отфильтровывает большой результат до получения первых 100 продуктов

Но если Я пишу

Products = repository.Products 
       .Skip((page - 1) * PageSize) 
       .Take(PageSize) 
       .OrderByDescending(p => p.Date) 
       .Where(x=>x.Description.Contains("%Laptop%"); 

Тогда страница 1 не имеет 100 продуктов, поскольку запрос повторит 100 продуктов первой, а затем фильтрации

Что Shou ld Я делаю, чтобы получить 100 продуктов (содержат строку «Ноутбук») и не получить ошибку времени?

+0

Вы уверены, что он будет тайм-аут? Ты это пробовал? –

+0

Спасибо. Я пробовал это – kaboom

ответ

2

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

Как это:

Products = repository.Products 
       .Where(x=>x.Description.Contains("Laptop"); 
       .OrderByDescending(p => p.Date) 
       .Skip((page - 1) * PageSize) 
       .Take(PageSize) 

Примечание, содержит заводятся в like %input%, поэтому нет необходимости окружить его % с;)

+0

awesome! оно работает!!! можете ли вы объяснить соглашение? Я подумал, что сначала сделал фильтрацию, так что будет время (но это не так) – kaboom

+0

Это просто так, что вам необязательно обрабатывать лишние элементы без необходимости. –

Смежные вопросы