2009-11-14 46 views
5

我有一個關於linq的問題。我正在使用跳過和採取分頁:linq分頁 - 獲取總行數

(from l in db.ProductList 
      select l).Skip((page - 1) * row_per_page).Take(row_per_page) 

它的工作,我需要檢索產品列表的總行來計算最大頁面。我想我必須使用另一個查詢來計算行,但有另一種方法可以在上面的一個查詢中做到這一點?

回答

4

爲了得到行數,使用.Count中()擴展方法

var count = (from l in db.ProductList select l).Count(); 
+1

或者:var count = db.ProductList.Count() – 2009-11-14 08:37:21

+0

這樣做,並且由於它正在調用count,所以它不必將任何數據頁拉到內存中,因爲此信息保存在索引中(假設這表至少有一個);這意味着這個查詢將會非常快,甚至比返回單個記錄更快。 – naspinski 2010-11-09 02:03:44

0

沒有一種方式來獲得兩行的總數和「跳過/採取」集這些行在同一個查詢中。

是否有理由在兩個查詢中需要這個?

1

底線是你將不得不枚舉所有項目來獲得總頁碼。但是你只想列舉一次。 我建議你嘗試GroupBy方法來獲得一個IEnumerable>「pages」。然後你可以使用pages.Count()來獲得頁數。或者你可以枚舉頁面來獲取每一頁的項目。 GroupBy查詢將只執行一次。