2013-06-13 17 views
5

ho questo:LINQ to Entities utilizzando l'SQL LIKE operatore

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

diverse volte per diverse variabili al fine di costruire SQL dinamico.

Come potrei fare per trasformare il sopra per dire:

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

?

+1

ricerca è il tuo amico - http://stackoverflow.com/questions/2493703/linq-to-entity-using-a-sql-like-operator?rq=1 – EkoostikMartin

+0

che non mi aiuta. Conosco "Contiene" ma come potrei implementarlo nel codice che ho? –

+1

Se sapessi di 'Contains()' non staresti facendo questa domanda ... – EkoostikMartin

risposta

5

Se invece si è interessati a trovare una stringa all'interno di un'altra stringa, il modo migliore per farlo è con il metodo Contains:

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

Poiché il metodo String.Contains si traduce in:

CHARINDEX(ShowTypeDescription, @showTypeDescription) > 0 

Che è più o meno equivalente a:

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

Aggiornamento: in LINQ to SQL, è possibile utilizzare il metodo SqlMethods.Like:

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

Questo sarà direttamente tradurre in SQL LIKE dell'operatore. Nota, tuttavia, questo non funzionerà al di fuori delle query Linq-to-SQL. Cercare di chiamare questo metodo in altri contesti genererà un'eccezione.

+0

qualche idea se posso fare la mia espressione? passerei una stringa – CMS

+0

@CMS Vedere la mia risposta aggiornata. –

+0

non sono sicuro del perché, ma se lo chiamo farlo in EF6 ottengo un errore nel convertire l'espressione del negozio Booleano come (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' 
Problemi correlati