木子屋 Dnawo's BLOG

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

👤 dnawo 📅 2013-05-17 👁 13097 👍 0 💬 0 🔄 来源:本站原创
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);
        }
    }
    [color=Red]else
    {
        data = data.OrderBy(d => d.Id);
    }[/color]
    //分页
    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)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 C#计算指定日期是当年第几周 下一篇 → EasyUI插件:DataGrid简单示例