2010-11-04 8 views
2

Salut J'ai cette requête LINQ:dynamique où dans LINQ

var q = 
    (from vr in Util.db.ValuationsRequests 
    where vr.dtSubmitted != null 
    select vr 
    ).AsEnumerable<ValuationsRequest>(); 

Mais je veux faire une recherche avec 3 autres paramètres: paramValuationId (int), paramValue (Boolean), paramTitle (string).

Quelque chose comme:

if (paramTitle != string.empty) 
//add this field to the where 

Mais si le paramTitle est vide Je ne veux pas chercher.

Quelle est la bonne façon de procéder?

+0

Quels sont les champs correspondant à comparer vos paramètres optionnels? – dotariel

Répondre

5
string paramTitle = "hello"; 
var q = 
    (from vr in Util.db.ValuationsRequests 
    where vr.dtSubmitted != null 
     && (paramTitle == "" || vr.paramTitle == paramTitle) 
    select vr 
    ).AsEnumerable<ValuationsRequest>(); 
+1

Votre clause AND me fait mal aux yeux. '&& (paramTitle ==" "|| vt.paramTitle == paramTitle)' s'il vous plait! – fearofawhackplanet

+0

@fearofawhackplanet .... lol, désolé à ce sujet ... votre droit, aurait dû simplifié –

+0

Ne sera pas paramTitle == "" potentiellement causer un index sur le champ ne doit pas être utilisé? Ne serait-il pas mieux de construire le où dynamiquement dans le code alors seulement exécuter le SQL qui s'applique? –

2
var q = 
(from vr in Util.db.ValuationsRequests 
where vr.dtSubmitted != null 
select vr 
).AsEnumerable<ValuationsRequest>(); 

if(!string.IsNullOrEmpty(paramTitle)) 
    q = q.Where(p => p.ParamTitle == paramTitle);