En cherchant comment effectuer un SELECT TOP 5 avec LINQ-to-SQL, toutes les réponses que j'ai vues suggèrent d'utiliser .Take(), comme si:Performances LINQ to SQL avec les requêtes "SELECT TOP {x}"
var myObject = (
from myObjects in repository.GetAllMyObjects()
select myObject)
.Take(10);
Je ne comprends pas encore plus de la façon dont fonctionne LINQ derrière les coulisses, mais à ma connaissance des langues C-comme cela résoudrait en attribuant d'abord un tableau temporaire contenant tous les enregistrements, puis copier le 10 premiers éléments dans le tableau à var. Ce n'est pas un problème si vous travaillez sur un petit jeu de données ou sans contraintes de performances, mais cela me semble terriblement inefficace si vous sélectionnez, par exemple, les 5 entrées les plus récentes d'une table pouvant contenir des millions d'enregistrements.
Est-ce que je comprends comment cela fonctionne mal? Si oui, quelqu'un pourrait-il expliquer ce qui se passe réellement? Sinon, quel (le cas échéant) est le meilleur (c'est-à-dire plus efficace) de sélectionner uniquement des enregistrements x via LINQ-to-SQL?
[modifier]
J'ai la classe myObject hypothétique sortie envoi LINQ to SQL à la sortie de débogage selon la suggestion contenue dans la réponse acceptée. J'ai fini par utiliser le DebuggerWriter à partir d'ici: http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID=11
Dans votre débogueur, vous pouvez inspecter l'objet Linq et il vous montrera la requête SQL qu'il va exécuter. Peut-être que cela va aider? –