2014-04-02 186 views
2

我当我使用“LINQ到实体”,以显示每一个产品和ASP.NET MVC:如何解决“方法'Skip'只支持LINQ to Entities中的排序输入。”

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

你尝试过使用'OrderBy'而不是'Where'吗?你做了什么事? –

+0

@Cupcake是的,我试过了。 'OrderBy'的结果返回与特定ID无关的所有产品。 –

回答

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 

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

相关问题