2012-03-15 27 views

cevap

67
var total = bannersPhrases.Select(p => p.Phrase).Count(); 
var pageSize = 10; // set your page size, which is number of records per page 

var page = 1; // set current page number, must be >= 1 

var skip = pageSize * (page-1); 

var canPage = skip < total; 

if (canPage) // do what you wish if you can page no further 
    return; 

Phrases = bannersPhrases.Select(p => p.Phrase) 
      .Skip(skip) 
      .Take(pageSize) 
      .ToArray(); 
+3

+1 bu aslında sayfaları seçer tek cevap, geri kalanı sadece öğeleri seçin 11-20 ;-) –

+2

ise olduğu Oldukça belli bannersPhrases bir 'IQueryable' yorumunun geri kalanını görmezden geliyor. Lütfen bunu evde yapmayın! Enumerable.Skip' O (n)! :-) (eğer bana güvenmiyorsan, IlSpy/Reflector'dan bakmayı dene). BannerPhrases'i önbelleğe almadığınızı bile hatırlayacağım. Umarım bannersPhrases sabit bir koleksiyondur, çünkü eğer çok "IEnumerable" ise o zaman her sayfa için yeniden üretilecek. – xanatos

6

sonraki 10 ürün dönecektir .Skip() .bu kullanabilirsiniz: kullanabilirsiniz

Phrases = bannersPhrases.Select(x=>x.Phrase).Skip(10).Take(10).ToArray() 
3

Skip uzatma yöntemi çağrıyı yapıyoruz ve sadece istiyorsanız

Phrases = bannersPhrases.Select(x=>x.Phrase).Skip(10).Take(10).ToArray() 
17

Belirli bir sayfaya atlamak için Skip ve Take diğer cevaplarda açıklandığı gibi kullanabilirsiniz. Ancak, tüm diziyi belirli bir boyuttaki parçalar halinde gruplandırmak isterseniz, bunun yerine GroupBy'u kullanabilirsiniz.

var groupSize = 4; 
// The characters 'a' - 'z'. 
var source = Enumerable.Range(0, 26).Select(i => (Char) ('a' + i)); 
var groups = source 
    .Select((x, i) => new { Item = x, Index = i }) 
    .GroupBy(x => x.Index/groupSize, x => x.Item); 
foreach (var group in groups) 
    Console.WriteLine("{0}: {1}", group.Key, String.Join(", ", group)); 

çıkışı: Burada küçük bir örnektir

 
0: a, b, c, d 
1: e, f, g, h 
2: i, j, k, l 
3: m, n, o, p 
4: q, r, s, t 
5: u, v, w, x 
6: y, z 
+0

Lütfen linq sorgunuzun nasıl çalıştığını açıklar mısınız? Her zaman bir Select sorgusundaki koleksiyon öğesine erişiminiz olduğunu düşündüm. Burada toplama elemanına ve ayrıca nereden geldiğini anlamadığım hayali bir i erişimi var. –

+1

@ParthShah: Bu bir "hayali" değil. Kaynak dizisindeki elemanın indisidir. Kullanmakta olduğum aşırı yüklenme [MSDN'de belgelenmiştir] (http://msdn.microsoft.com/en-us/library/bb534869 (v = vs.110) .ASPX). Kaynak dizisini, daha sonra gruplamak için kullandığım dizini içeren bir diziye yansıtıyorum. –

+1

Hayali çağırdığım için üzgünüm. Vay bu harika bir sorgu! Siz efendim oy verdim! –

İlgili konular