LINQ to Entities分页出错:必须在调用“Skip”方法之前调用方法“OrderBy”

using (testContext context = new testContext())
{
    var data = context.People.AsQueryable();
    //排序
    if (sort.Equals("Created", StringComparison.OrdinalIgnoreCase))
    {
        if (order.Equals("desc", StringComparison.OrdinalIgnoreCase))
        {
            data = data.OrderByDescending(d => d.Created);
        }
        else
        {
            data = data.OrderBy(d => d.Created);
        }
    }
    //分页
    data = data.Skip((page - 1) * pagesize).Take(pagesize);
    //输出
    foreach (var item in data)
    {
        Console.WriteLine("{0},{1},{2}", item.Id, item.Name, item.Created);
    }
}

上边代码运行出错,错误信息:

引用内容 引用内容
仅对 LINQ to Entities 中已排序的输入支持方法“Skip”。必须在调用“Skip”方法之前调用方法“OrderBy”。

看信息应是某个分支未进行排序,检查代码并做如下修改后运行正常(红色部分新增):

using (testContext context = new testContext())
{
    var data = context.People.AsQueryable();
    //排序
    if (sort.Equals("Created", StringComparison.OrdinalIgnoreCase))
    {
        if (order.Equals("desc", StringComparison.OrdinalIgnoreCase))
        {
            data = data.OrderByDescending(d => d.Created);
        }
        else
        {
            data = data.OrderBy(d => d.Created);
        }
    }
    else
    {
        data = data.OrderBy(d => d.Id);
    }

    //分页
    data = data.Skip((page - 1) * pagesize).Take(pagesize);
    //输出
    foreach (var item in data)
    {
        Console.WriteLine("{0},{1},{2}", item.Id, item.Name, item.Created);
    }
}


评论: 0 | 引用: 0 | 查看次数: 11727
发表评论
登录后再发表评论!