web-dev-qa-db-fra.com

Limiter le nombre de résultats renvoyés dans une liste de Linq

J'utilise Linq/EF4.1 pour extraire certains résultats d'une base de données et j'aimerais limiter les résultats aux (X) résultats les plus récents. Où X est un nombre défini par l'utilisateur.

Y a-t-il un moyen de faire cela?

Je les renvoie actuellement en tant que List si cela aidera à limiter le jeu de résultats. Bien que je puisse limiter cela en boucle jusqu'à atteindre X, je suppose que je ne transmettrai pas les données supplémentaires.

Juste au cas où cela serait pertinent ... Projet C # MVC3 exécuté à partir d'une base de données SQL Server.

58
Jared

Utilisez la fonction Take

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

En supposant que listOfItems soit la liste de vos objets d'entité et que CreatedDate soit un champ qui a la date de création (utilisé ici pour effectuer la commande par ordre décroissant pour obtenir les éléments récents).

La fonction Take () renvoie un nombre spécifié d'éléments contigus à partir du début d'une séquence.

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

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

OrderByDescending triera les éléments en fonction de votre propriété date/heure (ou de la logique que vous souhaitez utiliser pour obtenir les informations les plus récentes) et Take se limitera aux x premiers éléments (la première étant la plus récente, grâce à la commande).

Edit: Pour retourner des lignes ne commençant pas par la première ligne, utilisez Skip():

results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10);
25
Mr. TA

Utilisez Take(), avant de convertir en liste. De cette façon, EF peut optimiser la requête créée et ne renvoyer que les données dont vous avez besoin.

14
RedFilter