2011-07-15 3 views
0

Est-ce possible ... ??? J'ai 4 DropDownLists sur ma page principale et l'utilisateur peut choisir parmi tout, tout ou partie de les DropDownLists. Je capture leur sélection (ou non-sélection) en utilisant une variable SESSION . Ce que je voudrais pouvoir faire est de passer les valeurs de variable de session à ma couche d'accès aux données et de construire une clause WHERE (peut-être en utilisant StringBuilder) puis de placer cette variable SOMEHOW dans mon expression de requête. Est-ce possible??? Désolé, je suis un débutant. Merci ~ ~ susanRequête complexe LINQ to Entities

public class DLgetRestaurants 
    { 
     FVTCEntities db = new FVTCEntities(); 

     public List<RESTAURANT> getRestaurants(string cuisineName, string priceName, string cityName) 

     [Build a string based on the values passed to the function] 

     { 
      var cuisineID = db.CUISINEs.First(s => s.CUISINE_NAME == cuisineName).CUISINE_ID; 

      List<RESTAURANT> result = (from RESTAURANT in db.RESTAURANTs.Include("CITY").Include("CUISINE").Include("Price") 
             where **[USE STRINGBUIDER EXPRSSION HERE]** 
             select RESTAURANT).ToList(); 


      return result; 
     } 
    } 

Répondre

0

Je l'ai fait dans le passé en utilisant la Dynamic Linq Library.

+0

Je ne suis pas familier avec la façon de faire cela. Avez-vous un échantillon ??? – Susan

+0

Vous devez ajouter une référence à System.Linq.Dynamic. Ensuite, vous pouvez écrire votre requête comme ceci db.Restaurants.Where (myFilter). Myfilter est une chaîne qui peut contenir quelque chose comme "cuisine_name = 'Italian'" – boca

+0

Wow, merci! Cela m'a beaucoup aidé à simplifier mon code. Cordialement, ~ susan ~ – Susan

1

Vous pouvez composer Lorsque les conditions qui sont liées par une logique et relativement facile dans LINQ syntaxe de la méthode d'extension:

var query = db.RESTAURANTs.Include("CITY").Include("CUISINE").Include("Price"); 

if (userHasSelectedInDDL1) 
    query = query.Where(r => r.PropertyForDDL1 == ValueFromDDL1); 

if (userHasSelectedInDDL2) 
    query = query.Where(r => r.PropertyForDDL2 == ValueFromDDL2); 

if (userHasSelectedInDDL3) 
    query = query.Where(r => r.PropertyForDDL3 == ValueFromDDL3); 

if (userHasSelectedInDDL4) 
    query = query.Where(r => r.PropertyForDDL4 == ValueFromDDL4); 

List<RESTAURANT> result = query.ToList(); 

Pour une solution beaucoup plus flexible pour construire des requêtes dynamiquement la bibliothèque dynamique LINQ recommandée par boca est probablement le meilleur choix.

+0

merci beaucoup !! Je vais essayer la bibliothèque Dynamic LINQ – Susan