2010-04-13 10 views
7

Tengo una cadena "Word1 Word2" y quiero transformarla en una consulta como "Me gusta"% Word1% Word2% "".Linq2SQL para producir el operador Like

En el momento en que tienen:

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

de cómo hacer esto en LINQ2SQL? ¿Necesito crear dos consultas separadas para esto, no puedo escribirlo en la misma declaración?

Thx de antemano

Respuesta

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

Aunque los otros pueden ser correctos, preferí esta solución. – Dante

+0

Eso es bueno, no conocía este método. Está generando esto exactamente, si alguien se pregunta: DECLARAR @ p0 VarChar (13) SET @ p0 = '% Word1% Word2%' ..... DONDE [t0]. [Nombre] LIKE @ p0 –

0

Bueno, eso se traduciría en

LIKE "%Word1 Word2%" 

que probablemente no es lo que quiere ... Si escribe su consulta como esta:

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

Será generar el siguiente 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

El 'LIKE' original solo coincide cuando aparecen ambas palabras en el campo. –

+0

ah sí, cierto ... Editado. –

0

Como solución alternativa, tal vez esto será suficiente:

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

... con un poco de post-filtrado en el lado del cliente, para asegurar que se produce después de palabra2 palabra1.

Cuestiones relacionadas