Метод 'Пропуск' только поддерживается для отсортированного входа в LINQ к Объектам

Что могло вызывать эту проблему?

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

Какие-либо предложения?

18
задан Sergio Tapia 9 August 2010 в 03:37
поделиться

2 ответа

Похоже, что ошибка именно та, о которой говорится. "Пропуск разрешен только на отсортированных входах". Ища эту ошибку, я нашел вот это.

Это должно быть исправлено, если вы включите OrderBy перед Skip:

source.orderBy(???).Skip(PageIndex * PageSize).Take(PageSize)); 

Что может быть проблемой, поскольку вы передаете общий объект T. Возможно, вам придется расширить свой класс, чтобы получить еще один параметр для указания элемента порядка по.

28
ответ дан 30 November 2019 в 07:38
поделиться

У IQueryable нет порядка, поэтому говорить "игнорировать следующие x элементы" бессмысленно.

Если вы включите order by предложение (или, возможно, AsEnumerable() вызов - не проверено), то ваши данные будут иметь порядок, и Skip и Take станут разумными.

1
ответ дан 30 November 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: