2013-06-13 13 views
5

mam to:LINQ do podmiotów wykorzystujących SQL LIKE operatora

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

kilkakrotnie dla różnych zmiennych w celu stworzenia dynamicznego SQL.

Jak bym go o przekształcenie powyższego powiedzieć:

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

?

+1

wyszukiwanie jest twoim przyjacielem - http://stackoverflow.com/questions/2493703/linq-to-entity-using-a-sql-like-operator?rq=1 – EkoostikMartin

+0

, które nie pomaga mi. Wiem o "Zawiera", ale w jaki sposób mam to wdrożyć do kodu, który mam? –

+1

Jeśli wiedziałeś o 'Contains()', nie zadajesz tego pytania ... – EkoostikMartin

Odpowiedz

5

Jeśli chcesz to znaleźć podciąg ciągu innym ciągiem, najlepszym sposobem na to jest metodą Contains:

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

Ponieważ metoda String.Contains przekłada się:

CHARINDEX(ShowTypeDescription, @showTypeDescription) > 0 

Co jest mniej więcej równoważne:

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

Aktualizacja: w LINQ-SQL, można użyć metody SqlMethods.Like:

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

to bezpośrednio przekłada się na SQL LIKE operatora. Pamiętaj jednak, że to nie zadziała poza zapytaniami Linq-SQL. Próba wywołania tej metody w innych kontekstach spowoduje zgłoszenie wyjątku.

+0

jakikolwiek pomysł, czy mogę wyrazić własny wyraz? Przekazałbym ciąg – CMS

+0

@CMS Zobacz moją zaktualizowaną odpowiedź. –

+0

nie jestem pewien, dlaczego, ale jeśli zadzwonić zrobić to w EF6, otrzymuję błąd konwertujący wyrażenie Store Boolean like (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'