2010-04-13 16 views
7

Ho una stringa "Word1 Word2" e voglio trasformarla in una query come "Mi piace '% Word1% Word2%'".Linq2SQL per produrre operatore Like

Al momento ho:

from t in Test 
where t.Field.Contains("Word1 Word2") 

come fare questo in LINQ2SQL? Devo creare due query separate per questo, non posso scriverlo nella stessa dichiarazione?

Thx in anticipo

risposta

8
from t in Test 
where SqlMethods.Like(t.Field, "%Word1%Word2%") 
select t 
+0

Anche se gli altri potrebbero essere corretti, ho preferito questa soluzione. – Dante

+0

Che bello, non conoscevo questo metodo. Lo sta generando esattamente, se qualcuno si chiedesse: DECLARE @ p0 VarChar (13) SET @ p0 = '% Word1% Word2%' ..... DOVE [t0]. [Nome] LIKE @ p0 –

0

Bene che si tradurrebbe in

LIKE "%Word1 Word2%" 

che probabilmente non è ciò che si vuole ... se si scrive la query come questa:

where t.Field.Contains("Word1") && t.Field.Contains("Word2") 

Sarà genera il seguente codice SQL:

DECLARE @p0 VarChar(4) SET @p0 = '%ab%' 
DECLARE @p1 VarChar(4) SET @p1 = '%cd%' 
.... 
SELECT ... 
WHERE ([t0].[Field] LIKE @p0) AND ([t0].[Field] LIKE @p1) 
+0

L'originale 'LIKE' corrisponde solo quando entrambe le parole appaiono nel campo. –

+0

ah sì, vero ... Modificato. –

0

Come work-around, forse questo sarà sufficiente:

from t in Test 
where t.Field.Contains("Word1") && t.Field.Contains("Word2") 

... con un po 'di post-filtraggio sul lato client, per garantire che parola2 viene dopo parola1.