2010-11-23 3 views
1

J'essaie de créer une requête Linq basée sur l'entrée d'un utilisateur. En écrivant sql je pourrais construire une chaîne de sélection de sql basée sur les valeurs choisies mais avec linq à sql je ne suis pas sûr comment le faire. J'utilise les classes linq to sql. Voici ce que j'aiCréation de requêtes linq to sql dynamiques

 // Locals 
     TalentDBDataContext talentDB = new TalentDBDataContext() 
     int minAge = 0; 
     int maxAge = 120; 
     bool maleChecked = false; 
     bool femaleChecked = false; 
     List<string> ethnicities = new List<string>(); 
     List<string> states = new List<string>(); 

     var formData = Request.Form; 
     foreach (string key in formData.AllKeys) 
     { 
      string val = formData[key]; 
      switch(key) 
      { 
       case "AgeMinTxBx": 
        minAge = Int32.Parse(val); 
        break; 
       case "AgeMaxTxBx": 
        maxAge = Int32.Parse(val); 
        break; 
       case "GenderMaleCB": 
        maleChecked = true; 
        break; 
       case "GenderFemaleCB": 
        femaleChecked = true; 
        break; 
       case "EthnicitySelector": 
        ethnicities = val.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries).ToList(); 
        break; 
       case "StateSelector": 
        states = val.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries).ToList(); 
        break; 
       default: 
        break; 
      } 
     } 

     var results = 
      from t in talentDB.Talent 
      (femaleChecked == true) ? where t. // I don't thing this will work.. 

Y a-t-il un moyen de le faire? J'espère que cela a du sens. J'aime le linq d'intellisense et la vérification des erreurs. Peut-être existe-t-il encore un moyen d'écrire une chaîne de sélection SQL régulière, et je pourrais le faire dans cette situation. merci

+0

Montrez-nous à quoi vous voulez que votre requête ressemble (peut-être en SQL). En outre, je trouve la construction foreach-switch un peu effrayant. Une raison pour laquelle vous n'avez pas simplement utilisé: 'minAge = int.Parse (formData [" AgeMinTxBx "]); – Steven

Répondre

0

Vous pouvez utiliser la méthode ExecuteQuery pour exécuter directement une requête SQL sur cette base de données.

+0

Nice! c'est super. Savez-vous si ExecuteQuery est supposé être efficace? – RayLoveless

+0

IEnumerable tResults = talentDB.ExecuteQuery ("Sélectionnez * parmi les talents"); – RayLoveless