2012-06-04 16 views
36

Estoy utilizando Linq/EF4.1 para extraer algunos resultados de una base de datos y me gustaría limitar los resultados a los (X) resultados más recientes. Donde X es un número establecido por el usuario.Límite Número de resultados devueltos en una lista de Linq

¿Hay alguna manera de hacerlo?

Actualmente los estoy devolviendo como List si esto ayuda a limitar el conjunto de resultados. Si bien puedo limitar esto mediante un bucle hasta que toco X, supongo que no pasaré los datos adicionales.

En caso de que sea relevante ... proyecto C# MVC3 ejecutándose desde una base de datos SQL Server.

+3

¿Está pidiendo linq "take (100)"? – daryal

Respuesta

69

utilizar la función Take

int numberOfrecords=10; // read from user 
listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords) 

Suponiendo listOfItems está la lista de los objetos de entidad y CreatedDate es un campo que tiene el valor creado fecha (se utiliza aquí para hacer la Orden al descender para conseguir artículos recientes).

Take() La función devuelve un número especificado de elementos contiguos desde el inicio de una secuencia .

http://msdn.microsoft.com/en-us/library/bb503062.aspx

+1

"resultados más recientes": su respuesta no lo aborda. –

+0

@ Mr.TA: ¡Ah! Me perdí esa parte. Actualizado ahora Gracias por señalar. – Shyju

+1

Aunque realmente no necesitaba ayuda con la porción más reciente (redacté la pregunta con dificultad) ¡la toma es lo que necesitaba! ¡Gracias! – Jared

17
results = results.OrderByDescending(x=>x.Date).Take(10); 

El OrderByDescending será ordenar los elementos por la fecha de la propiedad/hora (o lógica/e w que desea utilizar para obtener la más reciente) y Take limitará a los primeros elementos x (primera siendo el más reciente, gracias al pedido).

Editar: Para volver algunas filas no a partir de la primera fila, utilice Skip():

results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10); 
+1

¿Es posible tomar resultados comenzando con algún índice? Por ejemplo, cien resultados: comience con el índice 50, tome 10 resultados, desde 50 hasta 60. – FrenkyB

+2

@FrenkyB Consulte la respuesta: la actualicé para abordar su seguimiento. –

+0

Maravilloso, muchas gracias :) – FrenkyB

10

Uso Take(), antes de convertir a una lista. De esta forma, EF puede optimizar la consulta que crea y solo devolver los datos que necesita.

+1

¿Podría elaborar más? Tal vez con un ejemplo? –

+1

@ W.M. Usar Take first permitirá que EF haga la búsqueda en la consulta SQL. Si primero hace ToList, todos los resultados se eliminarán de SQL, y la paginación se realizará en la memoria. – RedFilter

Cuestiones relacionadas