2009-11-21 8 views
9

Ich muss eine Abfrage erstellen, die überprüft, ob ein Feld (Zeichenfolge) ein oder mehrere Wörter zur Laufzeit enthält enthält.Linq To Sql 'Where Or' -Operator

Grundsätzlich muss ich in der Lage sein, eine WhereOr Frage zu stellen. Dies scheint ein häufiges Problem im Umgang mit LinqToSql zu sein.

Ich habe die folgenden reference gefunden, kann aber daraus keinen Sinn machen - und habe keine Ahnung, wie man es in meinem Projekt verwendet.

Ich habe die folgende Schleife versucht:

 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])); 
     } 

aber baut eine SQL-Abfrage mit WO UND Klauseln Wo OR

+0

eine interessante Ressource gefunden: http://www.albahari.com/nutshell/predicatebuilder.aspx –

+0

lookd wie Sie es selbst gefunden zu haben ^^ Ich begann bevor du diesen Kommentar gepostet hast. Ich hoffe, ich könnte helfen. –

Antwort

17

ich PredicateBuilder für solche Dinge verwenden.

Das Prädikat Aufbau sieht wie folgt aus:

 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. Ja, das würde ich auch empfehlen. – RichardOD

+0

Frage mich, warum dies nicht in LinqToSql gesichert wurde –