2009-06-12 5 views
2

Ich baue eine Ad-hoc-Abfragen zu SQL tun die folgenden senden:Wie kann ich ein OR in meiner Where-Klausel erhalten?

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

Das Problem ist, dass die WHERE Klauseln AND ‚zusammen ed bekommen. Ich brauche OR 's.

Haben Sie eine Idee, wie Sie eine OR bekommen?

Antwort

3

Wie wäre ich meine eigene Frage zu beantworten: PredicateBuilder

+0

die || Betreiber Dint Arbeit für Sie? – Perpetualcoder

+0

PerpetualCoder, du kannst nicht || zusammen eine dynamische Liste von Prädikaten. Deshalb benötigen Sie einen Prädikat-Builder. – Avish

2

Sie benötigen einen Ausdruck zu konstruieren, um das Verbundelement OR darstellen, übergeben Sie dann das zu Wo:

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: Diese ist wahrscheinlich das, was PredicateBuilder macht, nur viel unordentlicher :)