2011-05-31 29 views
24

Veritabanından LINQ kullanarak veri almamız gerekiyor. Şimdi sayfalama uygulamasını yapmalıyız. Bir kerede 10 kayıtlarını bir sonraki seferde getirmemiz gerektiğine ve Next (İleri) düğmesine tıkladığımızda, bir sonraki 10 kayıtlarını db'den getireceğimizi düşünüyorum.LINQ ve sayfa numaralandırma

Lütfen bana kod ile kılavuzluk edin. teşekkürler

cevap

64

Hep şu kodu kullanın: Eğer kaynaklarda içerebilir statik sınıf olduğunu

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); 
    } 

} 

. Bu sınıfı ekledikten sonra aşağıdakileri yapabilirsiniz:

MyQuery.Page(pageNumber, pageSize) 
+0

vay harika, teşekkürler: D – yozawiratama

+1

Lütfen LINQ to SQL'de ilk önce girişi sıralamanız gerektiğini unutmayın. – Sal

10

.Skip ve .Take uzatma yöntemleri kullanılabilir:

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

Çok kolay! Bilgi için teşekkürler! :) – vinigarcia87

18

LINQ Take() fonksiyon alınır kaç öğe sınırlayacaktır. Skip() işlevi, ilk n öğeleri yok sayar. Böyle bir şey işe yarayabilecek:

myDataSource.Skip(pageSize * curPage).Take(pageSize)