Что могло вызывать эту проблему?
public ActionResult Index(int page = 0)
{
const int pageSize = 3;
var areas = repo.FindAllAreas();
var paginatedArea = new PaginatedList<Area>(areas, page, pageSize);
return View(paginatedArea);
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UTEPSA.Controllers
{
class PaginatedList<T> : List<T>
{
public int PageIndex { get; private set; }
public int PageSize { get; private set; }
public int TotalCount { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
PageSize = pageSize;
TotalCount = source.Count();
TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);
//ERROR HERE->>this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
}
public bool HasPreviousPage
{
get
{
return (PageIndex > 0);
}
}
public bool HasNextPage
{
get
{
return (PageIndex + 1 < TotalPages);
}
}
}
}
Какие-либо предложения?
Похоже, что ошибка именно та, о которой говорится. "Пропуск разрешен только на отсортированных входах". Ища эту ошибку, я нашел вот это.
Это должно быть исправлено, если вы включите OrderBy перед Skip:
source.orderBy(???).Skip(PageIndex * PageSize).Take(PageSize));
Что может быть проблемой, поскольку вы передаете общий объект T. Возможно, вам придется расширить свой класс, чтобы получить еще один параметр для указания элемента порядка по.
У IQueryable
нет порядка, поэтому говорить "игнорировать следующие x элементы" бессмысленно.
Если вы включите order by
предложение (или, возможно, AsEnumerable()
вызов - не проверено), то ваши данные будут иметь порядок, и Skip
и Take
станут разумными.