El funcionamiento de Like es un poco parecido a en, pero la dirección ha cambiado. ¿Qué significa? Das una cadena y buscas un campo en los datos que contenga esa cadena. Es decir, una cadena dada es un subconjunto de un cuerpo. SQL scrip{filter}t se escribe así.
Selecciona * de la tabla donde me gustaría '%AD%' Selecciona * de la tabla donde me gustaría '%AD' Selecciona * de la tabla donde me gustaría 'AD%' El % anterior es un comodín, lo que indica que el campo contiene un valor, y la posición desconocida se reemplaza por %. La primera es indicar que la sección central es AD, y que los dos extremos no están claros. El segundo es AD al final, y el anterior no está claro. La tercera, por el contrario, comienza con AD y termina de forma poco clara. La sentencia Linq correspondiente es:
var q = (de c en db. Clientes donde c.CustomerID.Contains("ROUT") selecciona c). ToList(); El SQL que genera es
SELECT [t0]. [CustomerID], [t0]. [Nombre de la empresa], [t0]. [NombreDeContacto], [t0]. [ContactT itle], [t0]. [Dirección], [t0]. [Ciudad], [t0]. [Región], [t0]. [Código postal], [t0]. [Consejo] intentar], [t0]. [Teléfono], [t0]. [Fax] DE [dbo]. [Clientes] AS [t0] DONDE [t0]. [CustomerID] COMO @p0 -- @p0: Cadena de entrada (tamaño = 6; Prec = 0; Escala = 0) [%ROUT%] Terminando con ISSA, la carta comodín principal:
var q = (de c en db. Clientes donde c.CustomerID.EndsWith("ISSA") selecciona c). ToList(); El SQL que genera es
SELECT [t0]. [CustomerID], [t0]. [Nombre de la empresa], [t0]. [NombreDeContacto], [t0]. [ContactT itle], [t0]. [Dirección], [t0]. [Ciudad], [t0]. [Región], [t0]. [Código postal], [t0]. [Consejo] intentar], [t0]. [Teléfono], [t0]. [Fax] DE [dbo]. [Clientes] AS [t0] DONDE [t0]. [CustomerID] COMO @p0 -- @p0: Cadena de entrada (tamaño = 5; Prec = 0; Escala = 0) [%ISSA] Empezando por ARO, comodín de cola:
var q = (de c en db. Clientes donde c.CustomerID.WithsWith("ARO") selecciona c). ToList(); El SQL que genera es
SELECT [t0]. [CustomerID], [t0]. [Nombre de la empresa], [t0]. [NombreDeContacto], [t0]. [ContactT itle], [t0]. [Dirección], [t0]. [Ciudad], [t0]. [Región], [t0]. [Código postal], [t0]. [Consejo] intentar], [t0]. [Teléfono], [t0]. [Fax] DE [dbo]. [Clientes] AS [t0] DONDE [t0]. [CustomerID] COMO @p0 -- @p0: Cadena de entrada (tamaño = 4; Prec = 0; Escala = 0) [ARO%]
Linq también proporciona un método llamado SqlMethods.Like, que requiere añadir primero el espacio de nombres System.Data.Linq.SqlClient. Los tres anteriores pueden escribirse
var q = (de c en db. Clientes donde SqlMethods.Like(c.CustomerID, "%ROUT%") selecciona c). ToList(); Aquí, tienes que rellenar tú mismo el comodín para decirle a Linq cómo has hecho match. Como qué
var q = (de c en db. Clientes donde SqlMethods.Like(c.CustomerID, "%ISSA") selecciona c). ToList(); Otro ejemplo:
var q = (de c en db. Clientes donde SqlMethods.Like(c.CustomerID, "ARO%") selecciona c). ToList(); Lo más sorprendente de SqlMethods.Like es que puedes implementar comodines en cualquier lugar con tus propias expresiones comodines definidas. Como qué
var q = (de c en db. Clientes donde SqlMethods.Like(c.CustomerID, "A%O%T") selecciona c). ToList(); El SQL que genera es
SELECT [t0]. [CustomerID], [t0]. [Nombre de la empresa], [t0]. [NombreDeContacto], [t0]. [ContactT itle], [t0]. [Dirección], [t0]. [Ciudad], [t0]. [Región], [t0]. [Código postal], [t0]. [Consejo] intentar], [t0]. [Teléfono], [t0]. [Fax] DE [dbo]. [Clientes] AS [t0] DONDE [t0]. [CustomerID] COMO @p0 -- @p0: Cadena de entrada (tamaño = 5; Prec = 0; Escala = 0) [A%O%T]
Lo más estándar es saber que empieza por A y termina por T, conoce un valor O en medio y no conoce nada más. Solo usa esto. SQL Server define cuatro comodines, todos disponibles aquí. Son: Ejemplo de carácter comodín Descrip{filter}tion % Cualquier cadena de cero o más caracteres. DONDE títulos COMO '%computer%' encuentran todos los títulos de libros con la palabra 'ordenador' en cualquier parte del título. _ (guion bajo) Cualquier personaje en particular. DONDE au_fname COMO '_ean' encuentra los nombres de pila de cuatro letras que terminan en e (Dean, Sean, etc.). [ ] Cualquier carácter individual dentro del rango especificado ([a-f]) o conjunto ([abcdef]). DONDE au_lname COMO '[C-P]arsen' encuentra apellidos de autor que terminan en arsen y comienzan con cualquier carácter entre C y P, por ejemplo Carsen, Larsen, Karsen, y así sucesivamente. [^] Cualquier carácter individual que no esté dentro del rango especificado ([^a-f]) o conjunto ([^abcdef]). DONDE au_lname COMO 'de[^l]%' todos los apellidos de autor que comienzan por de y donde la siguiente letra no es l.
% representa una cadena de longitud cero o cualquier longitud. _ indica un carácter. [] indica un carácter dentro de un rango de rango. [^] indica un carácter que no está en un cierto rango Como qué:
var q = (de c en db. Clientes donde SqlMethods.Like(c.CustomerID, "A_O_T") selecciona c). ToList(); Simplemente usa _ para representar un personaje. El SQL generado es:
SELECT [t0]. [CustomerID], [t0]. [Nombre de la empresa], [t0]. [NombreDeContacto], [t0]. [ContactT itle], [t0]. [Dirección], [t0]. [Ciudad], [t0]. [Región], [t0]. [Código postal], [t0]. [Consejo] intentar], [t0]. [Teléfono], [t0]. [Fax] DE [dbo]. [Clientes] AS [t0] DONDE [t0]. [CustomerID] COMO @p0 -- @p0: Cadena de entrada (tamaño = 5; Prec = 0; Escala = 0) [A_O_T]
Para no gustar, también es muy sencillo, solo hay que añadir un sinsentido sin sentido.
var q = (de c en db. Clientes ¡Dónde! SqlMethods.Like(c.CustomerID, "A_O_T") selecciona c). ToList();
SqlMethods.Like también tiene un parámetro llamado carácter escape, que se traducirá en una sentencia como la siguiente.
SELECT columnas FROM table WHERE columna LIKE '%\%%' ESCAPE '\' escape se debe a que un campo contiene caracteres especiales, como %,_ [ ], que se usan como comodines. Ahí es donde entra Escape. Esto es cosa de SQL Server.
|