2011-01-30 2 views
3

У меня есть запрос linq для получения данных из базы данных. что-то вроде:как я могу сделать страницу в моем списке, используя linq

Repository.Query<Project>.Where(r=>r.IsActive).OrderBy(r=>r.Date); 

i затем верните это в режим просмотра. я теперь хочу добавить пейджинг, поэтому я получаю дополнительный параметр в своем действии контроллера, который является страницей, поэтому я хочу, чтобы что-то добавить к моему запросу, чтобы вернуться, скажем, 10 результатов * номер страницы:

Так что, если его страница 1, Я хочу получить первые 10 результатов. Я знаю, что я могу использовать

.Take(10) 

, чтобы сделать это, но я не уверен, как это сделать, когда страница передается в 2 или 3 или что-нибудь, кроме 1.

, что это лучший способ (и наиболее эффективный) для этого?

ответ

8

Используйте комбинацию из Skip и Take:

.Skip((page - 1) * resultsPerPage).Take(resultsPerPage); 
0

сделать метод расширения. Скорее всего, вам понадобится это во всем веб-приложении.

public static IEnumerable<T> TakePage<T>(this IEnumerable<T> items, int page, int pageSize = 10) where T : class 
{ 
    return items.Skip(pageSize * (page - 1)).Take(pageSize); 
} 

Использование:

int page = 2; 
int pageSize = 25; 
Repository.Query<Project>.Where(r=>r.IsActive).TakePage(page, pageSize); 
0

Я использую это: .Skip((page ?? 0) * resultsPerPage).Take(resultsPerPage);

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