как я могу страницу в свой список, используя linq - PullRequest
3 голосов
/ 31 января 2011

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

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

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

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

.Take(10)

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

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

Ответы [ 3 ]

8 голосов
/ 31 января 2011

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

.Skip((page - 1) * resultsPerPage).Take(resultsPerPage);
0 голосов
/ 28 апреля 2011

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

0 голосов
/ 31 января 2011

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

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);
...