2010-03-29 16 views
8

Soy nuevo en LINQ, buscando en la red ejemplos de LINQ que imiten a la declaración LIKE de SQL no me satisface.Versión de LINQ de la declaración LIKE de SQL

Lo que queremos es producir el mismo resultado de la consulta, ya que SQL

SELECT * FROM table_1 WHERE column_1 LIKE '__0%' 

Quiero consulta desde table_1 donde tercer personaje de columna_1 es '0'

¿Hay declaración equivalente en LINQ

: D gracias

+0

No olvide marcar su respuesta favorita. – Steven

Respuesta

9

usted puede utilizar la clase SqlMethods. Es parte de System.Data.Linq (a.k.a. LINQ to SQL).

from item in db.Table1 
where SqlMethods.Like(item.Column1, "__0%") 
select item; 
+1

si no es obvoius por los comentarios de Steven, esto no funciona con LINQ to Entity. Tendrás que usar el enfoque de Andrey. – northpole

+1

Aunque el 'SqlMethods.Like' permite la traducción directa a la instrucción SQL LIKE, prefiera el uso de los métodos' string' (como StartsWith y Contains) donde sea posible, ya que esto da como resultado un código que es más fácil de mantener. – Steven

0

Pruebe esto (no lo puedo probar ahora mismo):

from t in table_1 
where t.column_1[2] == '0' 
select t; 
+0

@Marcelo: Probablemente porque el código no funciona, ya que el guión bajo tiene un significado especial cuando se usa con 'me gusta', pero no cuando se usa con' StartsWith'. – Guffa

+0

¿Esto no comprueba si la entrada comienza con "__0" en lugar de si el tercer carácter es un "0"? – Jens

+0

'_' significa cualquier carácter en una declaración' LIKE', mientras que no tiene ningún significado especial para 'StartsWith'. –

8

Los gustos se producen por los siguientes métodos: StartsWith, EndsWith y Contains. Intenta jugar con ellos

+0

Él solo necesita que el tercer carácter sea cero, así que supongo que también debería mirar 'Substring'. –

0

En el caso exacto (suponiendo columna_1 es una cadena):

from t in table_1 
where !String.IsNullOrEmpty(t.column_1) && t.column_1.Length >= 3 && t.column_1[2] == '0' 
select t; 

Por supuesto, usted tiene toda la biblioteca .NET en sus disposiciones y podrían utilizar algún patrón sofisticada API de juego (como expresiones regulares) si que necesita una solución más general:

var regex = new Regex("..0.*"); 
var qry = from t in table_1 
      where regex.Match(t.column_1).Success 
      select t; 
+0

La expresión regular no funcionará para L2SQL, que creo que el OP está utilizando (aunque no está 100% claro) –

+0

oh, no lo sabía. Pero las técnicas regulares de combinación de cuerdas funcionan, ¿verdad? –