O funcionamento do Like é um pouco parecido com o in, mas a direção mudou. O que isso significa? Você fornece uma string e procura um campo nos dados que contenha essa string. Ou seja, uma dada cadeia é um subconjunto de um corpo. SQL scrip{filter}t é escrito assim.
Selec * da tabela onde eu gostaria de '%AD%' Selec * da tabela onde eu gostaria de '%AD' Selecione * da tabela onde eu gostaria de 'AD%' A % acima é um coringa, indicando que o campo contém um valor, e a posição desconhecida é substituída por %. A primeira é indicar que a seção do meio é AD, e as duas extremidades não são claras. O segundo é AD no final, e o anterior não é claro. A terceira, ao contrário, começa com AD e termina de forma pouco clara. A instrução correspondente de Linq é:
var q = (de c em db. Clientes onde c.CustomerID.Contains("ROUT") selecione c). ToList(); O SQL que ele gera é
SELECT [t0]. [CustomerID], [t0]. [Nome da Empresa], [t0]. [NomeDeContato], [t0]. [ContatoT itle], [t0]. [Endereço], [t0]. [Cidade], [t0]. [Região], [t0]. [Código Postal], [t0]. [Conselho tente], [t0]. [Telefone], [t0]. [Fax] DE [dbo]. [Clientes] AS [t0] ONDE [t0]. [CustomerID] COMO @p0 -- @p0: String de entrada (tamanho = 6; Prec = 0; Escala = 0) [%ROUT%] Terminando com a ISSA, principal wildcard:
var q = (de c em db. Clientes onde c.CustomerID.EndsWith("ISSA") selecione c). ToList(); O SQL que ele gera é
SELECT [t0]. [CustomerID], [t0]. [Nome da Empresa], [t0]. [NomeDeContato], [t0]. [ContatoT itle], [t0]. [Endereço], [t0]. [Cidade], [t0]. [Região], [t0]. [Código Postal], [t0]. [Conselho tente], [t0]. [Telefone], [t0]. [Fax] DE [dbo]. [Clientes] AS [t0] ONDE [t0]. [CustomerID] COMO @p0 -- @p0: String de entrada (tamanho = 5; Prec = 0; Escala = 0) [%ISSA] Começando com ARO, wild card de cauda:
var q = (de c em db. Clientes onde c.CustomerID.StartsWith("ARO") selecione c). ToList(); O SQL que ele gera é
SELECT [t0]. [CustomerID], [t0]. [Nome da Empresa], [t0]. [NomeDeContato], [t0]. [ContatoT itle], [t0]. [Endereço], [t0]. [Cidade], [t0]. [Região], [t0]. [Código Postal], [t0]. [Conselho tente], [t0]. [Telefone], [t0]. [Fax] DE [dbo]. [Clientes] AS [t0] ONDE [t0]. [CustomerID] COMO @p0 -- @p0: String de entrada (tamanho = 4; Prec = 0; Escala = 0) [ARO%]
O Linq também fornece um método chamado SqlMethods.Like, que exige que o namespace System.Data.Linq.SqlClient seja adicionado primeiro. Os três acima podem ser escritos
var q = (de c em db. Clientes onde SqlMethods.Like(c.CustomerID, "%ROUT%") selecione c). ToList(); Aqui, você precisa preencher o coringa para contar ao Linq como você se encaixou. Como o quê
var q = (de c em db. Clientes onde SqlMethods.Like(c.CustomerID, "%ISSA") selecione c). ToList(); Outro exemplo:
var q = (de c em db. Clientes onde SqlMethods.Like(c.CustomerID, "ARO%") selecione c). ToList(); A coisa mais incrível sobre o SqlMethods.Like é que você pode implementar curingas em qualquer lugar com suas próprias expressões de coringa definidas. Como o quê
var q = (de c em db. Clientes onde SqlMethods.Like(c.CustomerID, "A%O%T") selecione c). ToList(); O SQL que ele gera é
SELECT [t0]. [CustomerID], [t0]. [Nome da Empresa], [t0]. [NomeDeContato], [t0]. [ContatoT itle], [t0]. [Endereço], [t0]. [Cidade], [t0]. [Região], [t0]. [Código Postal], [t0]. [Conselho tente], [t0]. [Telefone], [t0]. [Fax] DE [dbo]. [Clientes] AS [t0] ONDE [t0]. [CustomerID] COMO @p0 -- @p0: String de entrada (tamanho = 5; Prec = 0; Escala = 0) [A%O%T]
O mais padrão é saber que começa com A e termina com T, conhece um valor O no meio e não sabe mais nada. Só use isso. O SQL Server define quatro curingas, todas disponíveis aqui. São elas: Exemplo de personagem coringa Descrip{filter}tion % Qualquer sequência de zero ou mais caracteres. ONDE títulos como '%computer%' encontram todos os títulos de livros com a palavra 'computador' em qualquer lugar do título. _ (sublinhado) Qualquer personagem. ONDE au_fname COMO '_ean' encontra todos os primeiros nomes de quatro letras que terminam com ean (Dean, Sean, e assim por diante). [ ] Qualquer caractere individual dentro do intervalo especificado ([a-f]) ou conjunto ([abcdef]). ONDE au_lname COMO '[C-P]arsen' encontra sobrenomes de autor terminando com arsen e começando com qualquer caractere entre C e P, por exemplo Carsen, Larsen, Karsen, e assim por diante. [^] Qualquer caractere individual que não esteja dentro do intervalo especificado ([^a-f]) ou conjunto ([^abcdef]). ONDE au_lname COMO 'de[^l]%' todos os sobrenomes dos autores começando com de e onde a letra seguinte não é l.
% representa uma sequência de comprimento zero ou qualquer comprimento. _ indica um caractere. [] indica um caractere em um intervalo. [^] indica um caractere que não está em um determinado intervalo Como o quê:
var q = (de c em db. Clientes onde SqlMethods.Like(c.CustomerID, "A_O_T") selecione c). ToList(); Basta usar _ para representar um personagem. O SQL gerado é:
SELECT [t0]. [CustomerID], [t0]. [Nome da Empresa], [t0]. [NomeDeContato], [t0]. [ContatoT itle], [t0]. [Endereço], [t0]. [Cidade], [t0]. [Região], [t0]. [Código Postal], [t0]. [Conselho tente], [t0]. [Telefone], [t0]. [Fax] DE [dbo]. [Clientes] AS [t0] ONDE [t0]. [CustomerID] COMO @p0 -- @p0: String de entrada (tamanho = 5; Prec = 0; Escala = 0) [A_O_T]
Para o Não Gostar, também é muito simples, só adicionar um absurdo.
var q = (de c em db. Clientes onde! SqlMethods.Like(c.CustomerID, "A_O_T") selecione c). ToList();
SqlMethods.Like também possui um parâmetro chamado caractere escape, que será traduzido em uma instrução como a seguinte.
SELECT colunas FROM table WHERE coluna LIKE '%\%%' ESCAPE '\' Escape ocorre porque um campo contém caracteres especiais, como %,_ [ ], que são usados como curingas. É aí que entra o Escape. Isso é coisa do SQL Server.
|