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

Tru*_*ham 2 c# linq linq-to-entities entity-framework

当我使用"LINQ to entities"来显示每个产品并在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'."
Run Code Online (Sandbox Code Playgroud)

LINQ:

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

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

Sim*_*ead 9

你不要" OrderBy代替Where"......你把它们结合起来:

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

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

WHERE generated_id BETWEEN x AND y
Run Code Online (Sandbox Code Playgroud)

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