2013-06-13 4 views
5

Ich habe dies:LINQ to Entities die SQL-LIKE-Operator mit

query = query.Where(s => s.ShowTypeDescription == showTypeDescription); 

mehrfach für verschiedene Variablen, um dynamische SQL zu bauen.

Wie würde ich mich über die Umwandlung der oben zu sagen:

query = query.Where(s => s.ShowTypeDescription **LIKE** showTypeDescription); 

?

+1

Suche ist dein Freund - http://stackoverflow.com/questions/2493703/linq-to-entity-using-a-sql-like-operator?rq=1 – EkoostikMartin

+0

das hilft mir nicht. Ich weiß über "Enthält", aber wie würde ich das in den Code implementieren, den ich habe? –

+1

Wenn Sie über 'Contains()' wüssten, würden Sie diese Frage nicht stellen ... – EkoostikMartin

Antwort

5

Wenn alles, was Sie wollen, ist einen Teil innerhalb einer anderen Zeichenfolge zu finden, der beste Weg, dies zu tun ist mit der Contains Methode:

query = query.Where(s => s.ShowTypeDescription.Contains(showTypeDescription)); 

Da die String.Contains Methode übersetzt:

CHARINDEX(ShowTypeDescription, @showTypeDescription) > 0 

Das entspricht in etwa:

ShowTypeDescription LIKE '%' + @showTypeDescription + '%' 

Update: In Linq-to-SQL, können Sie die SqlMethods.Like Methode verwenden:

query = query.Where(s => SqlMethods.Like(s.ShowTypeDescription, showTypeDescription)); 

Diese direkt an den SQL LIKE Operator übersetzen. Beachten Sie jedoch, dass dies außerhalb von Linq-to-SQL-Abfragen nicht funktioniert. Der Versuch, diese Methode in anderen Kontexten aufzurufen, löst eine Ausnahme aus.

+0

irgendeine Idee, wenn ich meinen eigenen Ausdruck machen kann? Ich würde eine Zeichenfolge übergeben – CMS

+0

@CMS Siehe meine aktualisierte Antwort. –

+0

ich bin nicht sicher, warum, aber wenn ich es in EF6 aufrufen, erhalte ich einen Fehler beim Konvertieren des Speicherausdrucks Boolean wie (System.String, System.String) – CMS

10
query = query.Where(s => s.ShowTypeDescription.Contains(showTypeDescription)); 

    Contains() is translated LIKE '%term%' 
    StartsWith() = LIKE 'term%' 
    EndsWith() = LIKE '%term'