2010-10-20 7 views
0

Je reçois un IQueryable de ma base de données et ensuite je reçois un autre IQueryable de ce premier - c'est-à-dire, je filtre le premier. Ma question est: est-ce que cela affecte les performances? Combien de fois le code appellera-t-il la base de données? Je vous remercie.Question de performance LINQ-to-SQL

code:

DataContext _dc = new DataContext(); 

IQueryable offers = 
(from o in _dc.Offers 
select o); 

IQueryable filtered = 
(from o in offers 
select new { ... }); 

return View(filtered); 

Répondre

2

Le code que vous avez donné ne sera jamais appeler la base de données puisque vous n'êtes jamais en utilisant les résultats de la requête dans un code.

Les collections IQueryable ne sont pas remplies tant que vous ne les parcourez pas ... et que vous n'effectuez pas d'itération dans l'échantillon de code (ah, la beauté de l'initialisation paresseuse). Cela signifie également que chacune de ces instructions sera exécutée comme sa propre requête sur la base de données, ce qui ne nécessite aucun coût de performance par rapport à deux requêtes complètement indépendantes.

+0

Merci pour votre note. Juste ajouté la dernière ligne de code -Je retournerai le "filtré" IQueryable. –

+0

@Bruno - Cela ne provoquera toujours pas l'exécution de la requête. La requête (qui sera une requête unique) ne s'exécutera pas tant que les résultats de l'appel de méthode ne seront pas itérés dans votre vue. –

0

SO ne remplace pas les outils de développement. Il y a beaucoup de bons outils gratuits capables de vous dire exactement ce que ce code traduit et comment cela fonctionne. Utilisez Reflector sur cette méthode et regardez quel code est généré et vous vous demandez ce qui se passe à partir de là.

+0

La troisième phrase était suffisante James. Le reste montre que vous avez un mauvais jour. –

+0

Oui, j'ai pseudo-regretté d'avoir posté ça après. Je vais l'éditer. –

+0

Notez qu'il ne s'agissait pas d'une attaque personnelle ou d'un ton condescendant. Je peux voir qu'il est facile de le lire de cette façon, cependant. Je m'excuse; Je voulais dire aucune infraction. C'est juste que c'est un schéma récurrent que la plupart des problèmes rencontrés sur SO viennent du manque de dynamisme de la part du questionneur pour creuser profondément et utiliser les outils disponibles. –