2011-05-31 13 views
24

हमें LINQ का उपयोग कर डेटाबेस से डेटा लाने की आवश्यकता है। अब हमें अंकन को लागू करने की जरूरत है।LINQ और पेजिनेशन

मुझे लगता है कि हमें एक समय में 10 रिकॉर्ड्स लाने की आवश्यकता है और जब हम अगला बटन क्लिक करेंगे तो यह अगले 10 डीबी से रिकॉर्ड्स लाएगा।

कृपया मुझे कोड के साथ मार्गदर्शन करें। धन्यवाद

उत्तर

64

मैं हमेशा निम्नलिखित कोड का उपयोग करें:

public static class PagingExtensions 
{ 
    //used by LINQ to SQL 
    public static IQueryable<TSource> Page<TSource>(this IQueryable<TSource> source, int page, int pageSize) 
    { 
     return source.Skip((page - 1) * pageSize).Take(pageSize); 
    } 

    //used by LINQ 
    public static IEnumerable<TSource> Page<TSource>(this IEnumerable<TSource> source, int page, int pageSize) 
    { 
     return source.Skip((page - 1) * pageSize).Take(pageSize); 
    } 

} 

एक स्थिर वर्ग, जो आप अपने स्रोतों में शामिल कर सकते हैं है। इस कक्षा को जोड़ने के बाद आप निम्न कार्य कर सकते हैं:

MyQuery.Page(pageNumber, pageSize) 
+0

वाह महान, धन्यवाद: डी – yozawiratama

+1

कृपया ध्यान दें कि LINQ से SQL में आपको पहले इनपुट को सॉर्ट करना होगा। – Sal

10

.Skip और .Take विस्तार तरीकों का इस्तेमाल किया जा सकता है:

var result = (from c in Customers 
       select new 
       { 
        c.City, 
        c.ContactName 
       } 
      ).Skip(5).Take(5); 
+0

बहुत आसान! जानकारी के लिए धन्यवाद! :) – vinigarcia87

18

LINQ Take() समारोह सीमित कर देगा कि कितने आइटम लिया जाता है। Skip() फ़ंक्शन पहले एन आइटमों को अनदेखा कर देगा। कुछ इस तरह काम कर सकते हैं:

myDataSource.Skip(pageSize * curPage).Take(pageSize) 
संबंधित मुद्दे