Me gustaría usar Linq para consultar un horario de autobuses en mi proyecto, para que en cualquier momento pueda obtener los próximos 5 horarios de llegada de autobuses. ¿Cómo puedo limitar mi consulta a los primeros 5 resultados?
En términos más generales, ¿cómo puedo tomar una porción de una lista en C #? (En Python, usaría mylist[:5]
para obtener los primeros 5 elementos).
.Take(n)
devuelve un TakeIterator; no devuelve una lista conn
elementos (suponiendo que hay muchos disponibles). Use.ToArray()
o.ToList()
en el resultado deTake
para obtener una matriz o lista concreta.En caso de que alguien esté interesado (incluso si la pregunta no solicita esta versión), en C # 2 sería: (He editado la respuesta, siguiendo algunas sugerencias)
fuente
Skip
+Take
es tan inteligente o si enumera los elementos omitidos. Y no necesito saberlo: solo uso GetRange (cuando se me da una Lista). Solo asegúrese de darse cuenta de que el segundo parámetro es el recuento (en lugar del último índice )..Take(n)
es que no tiene que preocuparse si hay menos den
elementos en la secuencia en la que funciona. El problemaList<T>.GetRange(0, count)
es que tienes que preocuparte ... obtendrás unArgumentException
si no haycount
elementos.Como
pagination
puede usar a continuación la fórmula para tomarslice of list or elements
:Ejemplo 1: primeros cinco artículos
Ejemplo 2: segundos cinco artículos
Ejemplo 3: terceros cinco elementos
fuente
Para tomar los primeros 5 elementos, use una expresión como esta:
var firstFiveArrivals = myList.Where([EXPRESSION]).Take(5);
o
var firstFiveArrivals = myList.Where([EXPRESSION]).Take(5).OrderBy([ORDER EXPR]);
Será más rápido que la variante orderBy, porque el motor LINQ no escaneará toda la lista debido a la ejecución retrasada, y no ordenará toda la matriz.
fuente