c# - 方法 'Skip' 仅支持 LINQ to Entities 中的排序输入

标签 c# linq-to-entities

是什么导致了这个问题?

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

有什么建议吗?

最佳答案

似乎错误正是它所说的。 “仅允许在已排序的输入上跳过”。搜索此错误,I've found this .

如果您在 Skip 之前包含一个 OrderBy,它应该是固定的:

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

这可能是个问题,因为您正在传递一个通用对象 T。您可能需要扩展您的类以接收另一个参数来指示元素的顺序。

关于c# - 方法 'Skip' 仅支持 LINQ to Entities 中的排序输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3437178/

相关文章:

linq - linq中的noob,选择每条记录的第一个值相同的记录

c# - 如何打印数据集的单个值

c# - IEnumerable 和良好实践(和 WCF)

c# - 以下方法或属性之间的调用不明确 : 'EntitiesLan.EntitiesLan()' and 'EntitiesLan.EntitiesLan()'

c# - 根据子集合总结一个属性

linq - 将 linq 结果转换为 List<MyInterface>

c# - 使用动态表达式 API 选择匿名类型

C# 一般设置属性

c# - F# "unmanaged"类型约束的行为

c# - 事件、委托(delegate)与 Action<T>