2009-11-21 9 views
9

Devo creare una query che controlli se un campo (stringa) contiene una o più parole fornite in fase di esecuzione.Linq To Sql Operatore 'Where Or'

Fondamentalmente, devo essere in grado di chiedere una domanda WhereOr. Sembra che dovrebbe essere un problema comune quando si ha a che fare con LinqToSql.

Ho trovato il seguente reference ma non ne ho il senso, e non ho idea di come utilizzarlo nel mio progetto.

ho provato il seguente ciclo:

 var query = from d in context.Domains select d; 
     for (int i = 0; i < words.Length; i++) 
     { 
      query = query.Where(d => d.Name.Contains(words[i])); 
     } 

ma questo crea una query SQL con DOVE E clausole non dove o

+0

trovato una risorsa interessante: http://www.albahari.com/nutshell/predicatebuilder.aspx –

+0

lookd come avete trovato voi stessi ^^ ho iniziato scrivendo prima di pubblicare quel commento. Spero di poterti aiutare. –

risposta

17

Io uso PredicateBuilder per queste cose.

La costruzione predicato assomiglia a questo:

 var query = from d in context.Domains select d; 
    var predicate = PredicateBuilder<Domains>.False(); 

    for (int i = 0; i < words.Length; i++) 
     { 
      predicate = predicate.Or(d => d.Name.Contains(words[i])); 
     } 
    query = query.Where(predicate); 
+0

+1. Sì, questo è quello che consiglierei anche – RichardOD

+0

Mi chiedo perché non è stato eseguito il backup in LinqToSql –