如何解决"方法' Skip'仅支持LINQ to Entities中的排序输入。"

时间:2014-04-02 03:20:45

标签: c# linq entity-framework linq-to-entities

当我使用" LINQ实体"时出现此错误在ASP.NET MVC中显示每个产品并实现分页。:

The method 'Skip' is only supported for sorted input in LINQ to Entities.
The method 'OrderBy' must be called before the method 'Skip'."

LINQ:

Model.Name = db.Products.Where(p => p.ProductSubcategoryID == id)
                        .Skip((page - 1) * pageSize)
                        .Take(pageSize)
                        .ToList();

我该如何解决?如果我将OrderBy代替Where会发生什么?

1 个答案:

答案 0 :(得分:8)

你没有“放OrderBy而不是Where”......你把它们结合起来:

Model.Name = db.Products.Where(p => p.ProductSubcategoryID == id)
                        .OrderBy(p => p.ProductSubcategoryID) // <---- this
                        .Skip((page - 1) * pageSize)
                        .Take(pageSize)
                        .ToList();

这是必需的,因为生成的SQL将生成如下内容:

WHERE generated_id BETWEEN x AND y

如果您没有明确告诉数据库服务器返回的结果是什么......您的结果每次都会有所不同(可能)。然而,如果您按字段进行排序,则可以保证它们按顺序排列,因此您的分页将产生一致的结果。