2009-06-11 101 views
0

我正在使用LINQ to SQL來搜索相當大的數據庫,並且不確定使用DataPager執行分頁的最佳方法。我知道Skip()和Take()方法,並讓這些方法正常工作。但是,我無法使用數據填充器的結果數,因爲它們將始終是Take()方法中確定的頁面大小。LINQ to SQL和DataPager

例如:

var result = (from c in db.Customers 
       where c.FirstName == "JimBob" 
       select c).Skip(0).Take(10); 

這個查詢將始終返回10分或更少的結果,即使有1000個JimBobs。因此,DataPager會一直認爲只有一個頁面,並且用戶無法瀏覽整個結果集。我看過一篇在線文章,其中作者只是寫了另一個查詢來獲得總數並將其調用。

喜歡的東西:

int resultCount = (from c in db.Customers 
        where c.FirstName == "JimBob" 
        select c).Count(); 

,並用於DataPager的那個值。但我真的寧願不必將每個查詢複製並粘貼到單獨的調用中,因爲我想分頁顯示結果的原因很明顯。是否有更簡單的方法可以在多個查詢中重用?

謝謝。

回答

0

在這樣的情況下,我有時會從數據庫返回結果集中的總記錄數作爲字段。

基本上,您只有兩個選項,專門爲計數編寫另一個查詢,或者將結果作爲列返回。

0

記住,LINQ提供defferred查詢執行...

var qry =  from c in db.Customers    
       where c.FirstName == "JimBob" 
       select c; 

int resultCount = qry.Count(); 

var results = qry.Skip(0).Take(10); 
+0

感謝。自發布以來,我實際上已經擺脫了這種方式,因爲我無法獲得網站所需的性能。上面的代碼是否只打一次數據庫? – 2009-09-09 17:16:12