2009-06-12 13 views
2

Je construis une requête ad-hoc pour envoyer à SQL procédant comme suit:Comment puis-je obtenir une OR dans ma clause Where?

var data = from d in db.xxxx select d; 
foreach (pattern in user_stuff) 
    data = data.Where(d=>SqlMethods.Like(d.item,pattern)==true); 

Le problème est que les clauses WHERE se AND « ed ensemble. J'ai besoin de OR.

Une idée comment obtenir un OR?

Répondre

3

Que diriez-vous que je répondre à ma propre question: PredicateBuilder

+0

le || opérateur dint travail pour vous ?? – Perpetualcoder

+0

PerpetualCoder, vous ne pouvez pas || ensemble une liste dynamique de prédicats. C'est pourquoi vous avez besoin d'un constructeur de prédicat. – Avish

2

Vous devez construire une expression pour représenter le composite ou prédicat, passe alors qu'à Où:

var data = from d in db.xxxx select d; 
Expression<Func<Data, bool>> predicate = null; 
foreach (var pattern in user_stuff) 
{ 
    Expression<Func<Data, bool>> newPredicate = d => SqlMethods.Like(d..item, pattern)); 
    if (predicate == null) predicate = newPredicate; 
    else predicate = Expression.OrElse(predicate, newPredicate); 
} 
return data.Where(predicate); 

EDIT: Ce est probablement ce que fait PredicateBuilder, seulement beaucoup plus désordonné :)