101 votes

Limitez le nombre de résultats renvoyés dans une liste à partir de Linq

Je suis en train d'utiliser Linq/EF4.1 pour récupérer quelques 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 ça ?

Actuellement, je les renvoie sous forme d'une Liste si cela peut aider à limiter l'ensemble de résultats. Bien que je puisse limiter cela en bouclant jusqu'à ce que j'atteigne X, je préférerais ne pas transmettre les données supplémentaires.

Au cas où cela serait pertinent... Projet C# MVC3 fonctionnant à partir d'une base de données SQL Server.

182voto

Shyju Points 46555

Utilisez la fonction Take

int numberOfrecords=10; // lu par l'utilisateur
listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords)

En supposant que listOfItems est la liste de vos objets entité et que CreatedDate est un champ qui contient la valeur de la date de création (utilisé ici pour faire le tri par ordre décroissant pour obtenir les éléments les plus récents).

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

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

41voto

Mr. TA Points 1939
résultats = résultats.OrderByDescending(x=>x.Date).Take(10);

Le OrderByDescending(...) triera les éléments selon votre propriété de date/heure (ou toute autre logique que vous souhaitez utiliser pour obtenir les plus récents) et Take(...) limitera aux x premiers éléments (le premier étant le plus récent, grâce au tri).

Éditer : Pour retourner certaines lignes sans commencer à la première ligne, utilisez Skip():

résultats = résultats.OrderByDescending(x=>x.Date).Skip(50).Take(10);

23voto

RedFilter Points 84190

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X