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 é
LOWER
em 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
Equals
ouStartsWith
em vez disso, se possível para sua tarefa - Alterar o agrupamento padrão da coluna?