2014-04-02 225 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 

如果您不要明確告訴數據庫服務器以什麼順序返回結果......每次你的結果都可能不同(可能)。然而,如果您按字段排序,則它們將保證按順序排列,因此您的分頁將產生一致的結果。

相關問題