Nunca use
.ToLower() para executar uma comparação que não diferencia maiúsculas de minúsculas. Aqui está o porquê:- Talvez esteja errado (seu agrupamento de cliente pode ser, digamos, turco, e seu agrupamento de banco de dados não).
- É altamente ineficiente; o SQL emitido é
LOWERem vez de=com um agrupamento que não diferencia maiúsculas de minúsculas.
Em vez disso, use
StringComparison.OrdinalIgnoreCase ou StringComparison.CurrentCultureIgnoreCase :var q = from f in Context.Foos
where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
select f;
Mas para
Contains() há um problema:Ao contrário de Equals , StartsWith , etc., ele não tem uma sobrecarga para um StringComparison argumento. Por quê? Boa pergunta; pergunte à Microsoft. Isso, combinado com a limitação do SQL Server em
LOWER significa que não há uma maneira simples de fazer o que você quer. As possíveis soluções alternativas podem incluir:
- Use um índice de texto completo e faça a pesquisa em um procedimento.
- Use
EqualsouStartsWithem vez disso, se possível para sua tarefa - Alterar o agrupamento padrão da coluna?