Eu tenho um procedimento no SQL que estou tentando transformar em Linq:
SELECT O.Id, O.Name as Organization
FROM Organizations O
JOIN OrganizationsHierarchy OH ON O.Id=OH.OrganizationsId
where OH.Hierarchy like '%/12/%'
A linha que mais me preocupa é:
where OH.Hierarchy like '%/12/%'
Eu tenho uma coluna que armazena a hierarquia como / 1/3/12 / por exemplo, então eu apenas uso% / 12 /% para procurá-la.
Minha pergunta é: qual é o equivalente do Linq ou .NET para usar o sinal de porcentagem?
5
votos para a tag de operador like . Posso pedir que você sugira sql-like como sinônimo ?Respostas:
Você também pode usar
.StartsWith()
ou.EndsWith()
.fonte
StartsWith("abc")
é convertido emLIKE 'abc%'
eEndsWith("abc")
é cnoverted paraLIKE '%abc'
.ToLower().Contains()
etc., se você quiser ignorar o caso. Se você deseja isso, é claro, dependerá de sua tentativa de imitar o LIKE de um banco de dados com agrupamento sem distinção entre maiúsculas e minúsculas ou não.Usa isto:
fonte
SqlMethods
uso da "notação de ponto"?System.Data.Linq.SqlClient
espaço para nome.Suponho que você esteja usando o Linq-to-SQL * (veja a nota abaixo). Nesse caso, use string.Contains, string.StartsWith e string.EndsWith para gerar SQL que use o operador SQL LIKE.
ou
Nota: * = se você estiver usando o ADO.Net Entity Framework (EF / L2E) no .net 3.5, saiba que ele não fará a mesma tradução que o Linq-to-SQL. Embora o L2S faça uma tradução adequada, o L2E v1 (3.5) se traduzirá em uma expressão t-sql que forçará uma verificação completa da tabela na tabela que você está consultando, a menos que haja outro discriminador melhor na sua cláusula where ou nos filtros de associação.
Atualização: Isso é corrigido no EF / L2E v4 (.net 4.0), portanto, gera um SQL LIKE exatamente como o L2S.
fonte
@
sinal, mas sei que isso pode ser apenas uma boa convenção a seguir.Se você estiver usando o VB.NET, a resposta seria "*". Aqui está a aparência da sua cláusula where ...
Nota: "*" Corresponde a zero ou mais caracteres. Aqui está o artigo msdn para o operador Like .
fonte
Bem indexOf funciona para mim também
fonte
Use esse código
fonte
O núcleo do .NET agora tem
EF.Functions.Like
fonte
Caso você não esteja combinando cadeias numéricas, é sempre bom ter maiúsculas e minúsculas:
fonte
Eu sempre faço isso:
Eu sei que não uso a instrução like, mas funciona bem em segundo plano. Isso é traduzido em uma consulta com uma instrução like.
fonte
Tente isso, isso funciona bem para mim
fonte
fonte
Contém é usado no Linq, assim como é usado no SQL.
. . .
Você pode escrever seu script SQL no Linq da seguinte forma:
fonte
Para aqueles que caem aqui como eu procurando um método "SQL Like" no LINQ, tenho algo que está funcionando muito bem.
Estou em um caso em que não posso alterar o banco de dados de forma alguma para alterar o agrupamento de colunas. Então, eu tenho que encontrar uma maneira no meu LINQ para fazer isso.
Estou usando o método auxiliar
SqlFunctions.PatIndex
que age de maneira semelhante ao operador SQL LIKE real.Primeiro, preciso enumerar todos os diacríticos possíveis (uma palavra que acabei de aprender) no valor da pesquisa para obter algo como:
e depois no LINQ, por exemplo:
Então, para as minhas necessidades, escrevi um método Helper / Extension
Se algum de vocês tiver alguma sugestão para aprimorar esse método, ficarei feliz em ouvi-lo.
fonte
Muito tarde, mas eu juntei isso para poder fazer comparações de String usando caracteres curinga do estilo SQL:
fonte