Подтвердить что ты не робот

LINQ и разбивка на страницы

Нам нужно получить данные из базы данных с помощью LINQ. Теперь нам нужно реализовать разбиение на страницы.

Полагаю, что за один раз нам нужно извлекать записи 10 за один раз, и когда мы нажимаем кнопку "Далее", тогда он будет извлекать следующие записи 10 из db.

Прошу вас проинструктировать меня кодом. спасибо

4b9b3361

Ответ 1

Я всегда использую следующий код:

public static class PagingExtensions
{
    //used by LINQ to SQL
    public static IQueryable<TSource> Page<TSource>(this IQueryable<TSource> source, int page, int pageSize)
    {
        return source.Skip((page - 1) * pageSize).Take(pageSize);
    }

    //used by LINQ
    public static IEnumerable<TSource> Page<TSource>(this IEnumerable<TSource> source, int page, int pageSize)
    {
        return source.Skip((page - 1) * pageSize).Take(pageSize);
    }

}

Это статический класс, который вы можете включить в свои источники. После добавления этого класса вы можете сделать следующее:

MyQuery.Page(pageNumber, pageSize)

Ответ 2

Функция LINQ Take() ограничивает количество элементов. Функция Skip() будет игнорировать первые n элементов. Возможно, что-то подобное:

myDataSource.Skip(pageSize * curPage).Take(pageSize)

Ответ 3

.Skip и .Take можно использовать методы расширения:

var result = (from c in Customers
              select new 
              {
                  c.City,
                  c.ContactName
              }
              ).Skip(5).Take(5);