2010-06-14 1 views
0

Je crée un site ASP.NET MVC qui utilise LINQ to SQL.Retarder l'exécution de requête LINQ to SQL Select

Dans ma méthode de recherche qui a certains paramètres obligatoires et optionnels, je veux construire une requête LINQ tout en testant l'existence de ces paramètres optionnels.


Voici ce que je pense actuellement:

using(var db = new DBDataContext()) 
     { 
      IQueryable<Listing> query = null; 

      //Handle required parameter 
      query = db.Listings.Where(l => l.Lat >= form.bounds.extent1.latitude && l.Lat <= form.bounds.extent2.latitude); 

      //Handle optional parameter 
      if (numStars != null) 
       query = query.Where(l => l.Stars == (int)numStars); 

      //Other parameters... 

      //Execute query (does this happen here?) 
      var result = query.ToList(); 

      //Process query... 

Will cette implémentation "bundle" les clauses where puis exécuter la requête groupée? Si non, comment devrais-je implémenter cette fonctionnalité?

De plus, y a-t-il autre chose que je peux améliorer?

Merci d'avance.

Répondre

7

Oui, la requête ne sera exécutée qu'une fois que ToList() est appelée. Si vous suivez ce modèle et que vous utilisez des types anonymes, sachez que OrderBy() renvoie IOrderedQueryable au lieu de IQueryable.

Sachez que vous pouvez simplement itérer sur le IQueryable, vous n'avez pas besoin d'appeler ToList pour accéder aux données.