2009-08-25 6 views
1

J'implémente une fonctionnalité de recherche pour une application qui utilise le framework d'entité. Plusieurs champs facultatifs permettent de rechercher une table/vue de base de données particulière. Quelle est la meilleure façon d'implémenter une telle recherche avec EF? Procédure stockée? Ou peut-il être fait (de façon réaliste) en utilisant Linq seulement?Entity Framework - SQL dynamique

Répondre

2

Vous devriez être en mesure de le faire dans LINQ assez facilement. Rappelez-vous toujours que les requêtes LINQ sont chaînables:

var query = (from p in products 
      select p); 

if(field1 != null) 
{ 
    query = (from p in query 
      where p.Field1 = field1 
      select p); 
} 

if(field2 != null) 
{ 
    query = (from p in query 
      where p.Field2 = field2 
      select p); 
} 

foreach(Product p in query) 
{ 
    // ... 
} 
+0

Est-ce que la définition originale de « requête » cause « select * des produits » à exécuter? – Jeremy

+0

Les requêtes LINQ n ° ne sont pas énumérées (c'est-à-dire que les résultats ne sont pas extraits de la base de données) jusqu'au dernier moment possible. Les appels ne font que s'accumuler, puis lorsque vous avez besoin d'accéder à un élément spécifique du résultat (ou du compte, etc.), l'ensemble de la requête assemblée est extraite du DB. – kevingessner

0

Vous pouvez jeter un oeil à this article sur la génération dynamique d'objets d'expression lambda pour le faire.

3

Un modèle commun pour le traitement des paramètres de recherche en option est de faire quelque chose comme ceci:

string p = null; 
var q = from o in dataContext.Products 
    where ((o.Name == p) || (p == null)) 
    select o;