Ответ зависит от реализации IPagedList
. PagedList
- это всего лишь модель (или модель обзора), как и другие модели. Вы можете инициализировать его, установив его свойства. Также всегда выгружаемый список содержит только страницу, которую вы хотите показать. Он никогда не будет содержать все данные.
Примечание: Реализации в этом ответе - просто держать вещи простыми. Чтобы увидеть популярную версию выгружаемого списка, вы можете взглянуть на X.PagedList. Он содержит некоторые реализации как для автоматического, так и для ручного подкачки, а также для некоторых полезных помощников для ASP.NET MVC.
Пример
Предположим, что у нас есть такая реализация IPagedList
:
public interface IPagedList<T> : IList<T>
{
int PageCount { get; set; }
int PageSize { get; set; }
int PageNumber { get; set; }
int TotalItemsCount { get; set; }
}
public class PagedList<T> : List<T>, IPagedList<T>
where T : class
{
public int PageCount { get; set; }
public int PageSize { get; set; }
public int PageNumber { get; set; }
public int TotalItemsCount { get; set; }
}
Затем вы можете создать экземпляр экземпляр PagedList<T>
как любые другие обычные классы, присвоив его свойства.
Также вы можете создать некоторые методы расширения, которые помогут вам извлечь данные конкретной страницы в IQueryable<T>
или IEnumerable<T>
:
using System;
using System.Collections.Generic;
using System.Linq;
public static class PagingExtensions
{
public static PagedList<T> ToPagedList<T>(this IEnumerable<T> source,
int pageNumber, int pageSize) where T : class
{ return source.AsQueryable().ToPagedList(pageNumber, pageSize); }
public static PagedList<T> ToPagedList<T>(this IQueryable<T> source,
int pageNumber, int pageSize) where T : class
{ return CreatePagesList<T>(source, pageNumber, pageSize); }
private static PagedList<T> CreatePagesList<T>(IQueryable<T> source,
int pageNumber, int pageSize) where T : class
{
var items = new List<T>();
var pageIndex = pageNumber - 1;
if (source == null) source = new List<T>().AsQueryable();
var totalItemsCount = source.Count();
if (pageNumber < 1)
throw new ArgumentOutOfRangeException("pageNumber cannot be less than 1.");
if (pageSize < 1)
throw new ArgumentOutOfRangeException("pageSize cannot be less than 1.");
var pageCount = 0;
if (totalItemsCount > 0)
pageCount = (int)Math.Ceiling(totalItemsCount/(double)pageSize);
if (pageIndex >= pageCount)
pageIndex = Math.Max(pageCount - 1, 0);
if (pageIndex < pageCount && totalItemsCount > 0)
items.AddRange(source.Skip((pageIndex) * pageSize).Take(pageSize).ToList());
var pagedList= new PagedList<T>()
{
PageNumber = pageNumber, PageSize = pageSize,
PageCount = pageCount, TotalItemsCount = totalItemsCount
};
pagedList.AddRange(items);
return pagedList;
}
}
Это зависит от реализации 'IPagedList'. С моей точки зрения, «PagedList» - это всего лишь модель (или модель представления), как и другие модели. Вы можете инициализировать его, установив его свойства. –
Также всегда выгружаемый список содержит только страницу, которую вы хотите показать. Он никогда не будет содержать все данные. –
В итоге мне пришлось вычислить общее количество строк, чтобы заставить его работать. – Emmanuel