当我使用" 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
会发生什么?
答案 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
如果您没有明确告诉数据库服务器返回的结果是什么......您的结果每次都会有所不同(可能)。然而,如果您按字段进行排序,则可以保证它们按顺序排列,因此您的分页将产生一致的结果。