2012-03-15 99 views

Respuesta

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 bastante seguro de que esta es la única respuesta que realmente selecciona páginas, el resto sólo artículos selectos 11-20 ;-) Si –

+2

bannersPhrases es un 'IQueryable' ignora el resto del comentario. Por favor, no hagas esto en casa! 'Enumerable.Skip' es O (n)! :-) (si no confías en mí, intenta mirarlo a través de IlSpy/Reflector). Incluso notaré que no está almacenando en caché bannersPhrases. Espero que bannersPhrases sea una colección fija, porque si es demasiado 'IEnumerable', se regenerará para cada página. – xanatos

6

Puede utilizar .Skip() .Esta devolverá los 10 elementos siguientes:

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

Puede utilizar Skip extensión método

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

Si usted está haciendo la paginación y lo que desea salte a una página en particular, puede usar Skip y Take como se describe en algunas de las otras respuestas. Sin embargo, si desea agrupar toda la secuencia en trozos de un tamaño particular, puede usar GroupBy en su lugar. Aquí hay un pequeño ejemplo:

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

La salida es:

 
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

¿Podría explicar cómo funciona su consulta de linq? Siempre pensé que solo tenías acceso al elemento de colección en una consulta Select. Aquí tienes acceso al elemento de colección más un yo imaginario, que no entiendo de dónde vino. –

+1

@ParthShah: No es un "yo imaginario". Es el índice del elemento en la secuencia fuente. La sobrecarga que estoy usando está [documentada en MSDN] (http://msdn.microsoft.com/en-us/library/bb534869 (v = vs.110) .ASPX). Proyecto la secuencia fuente en una secuencia que incorpora el índice que luego uso para agrupar. –

+1

Lo siento por llamarlo imaginario. Wow, esa es una consulta tan genial! ¡Usted señor se ganó mi voto! –

Cuestiones relacionadas