Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 20728|Resposta: 0

[Fonte] Como uma consulta difusa no Linq para SQL

[Copiar link]
Publicado em 07/09/2015 23:16:28 | | |
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.





Anterior:Otimização de Desempenho do Site: Explicação detalhada das configurações de controle de cache
Próximo:Ruijie sempre foi determinada ao que está acontecendo
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com