LINQ-to-SQL-Vergleichselemente in ein einzelnes Vergleichselement zusammenfassen

(Eine frühere Frage,Recursively (?) LINQ-Prädikate zu einem einzelnen Prädikat zusammensetzen, ist ähnlich, aber ich habe tatsächlich die falsche Frage gestellt ... die Lösung dort hat die gestellte Frage erfüllt, ist aber nicht wirklich das, was ich brauche. Sie sind jedoch unterschiedlich. Ehrlich.

Geben Sie den folgenden Suchtext ein:

"keyword1 keyword2 ... keywordN"

Ich möchte mit dem folgenden SQL enden:

SELECT [columns] FROM Customer 
  WHERE (
        Customer.Forenames LIKE '%keyword1%' 
        OR 
        Customer.Forenames LIKE '%keyword2%'
        OR
        ...
        OR
        Customer.Forenames LIKE '%keywordN%'
    ) AND (
        Customer.Surname LIKE '%keyword1%' 
        OR 
        Customer.Surname LIKE '%keyword2%'
        OR
        ....
        OR
        Customer.Surname LIKE '%keywordN%'
    )

Effektiv teilen wir den Suchtext auf Leerzeichen auf, kürzen jedes Token, konstruieren eine mehrteilige OR-Klausel, die auf jeder basiert, und UND-Verknüpfung der Klauseln.

Ich mache das in Linq-to-SQL und habe keine Ahnung, wie ich ein Prädikat basierend auf einer beliebig langen Liste von Subpredikaten dynamisch erstellen soll. Für eine bekannte Anzahl von Klauseln ist es einfach, die Prädikate manuell zu erstellen:

dataContext.Customers.Where(
    ( 
      Customer.Forenames.Contains("keyword1") 
      ||
      Customer.Forenames.Contains("keyword2")
    ) && (
      Customer.Surname.Contains("keyword1") 
      ||
      Customer.Surname.Contains("keyword2")
    )
);

urz gesagt, ich benötige eine Technik, die bei zwei gegebenen Prädikaten ein einziges Prädikat zurückgibt, das die beiden Quellprädikate mit einem angegebenen Operator zusammensetzt, jedoch auf die von Linq-to-SQL ausdrücklich unterstützten Operatoren beschränkt ist. Irgendwelche Ideen

Antworten auf die Frage(4)

Ihre Antwort auf die Frage