Non utilizzare mai .ToLower() per eseguire un confronto senza distinzione tra maiuscole e minuscole. Ecco perché:
- Probabilmente è sbagliato (il confronto del tuo cliente potrebbe essere, ad esempio, turco e il confronto del database no).
- È altamente inefficiente; l'SQL emesso è
LOWERinvece di=con regole di confronto senza distinzione tra maiuscole e minuscole.
Invece, usa StringComparison.OrdinalIgnoreCase o StringComparison.CurrentCultureIgnoreCase :
var q = from f in Context.Foos
where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
select f;
Ma per Contains() c'è un problema:a differenza di Equals , StartsWith , ecc., non ha un sovraccarico per un StringComparison discussione. Come mai? Buona domanda; chiedi a Microsoft.
Questo, combinato con la limitazione di SQL Server su LOWER significa che non c'è un modo semplice per fare quello che vuoi.
Possibili soluzioni alternative potrebbero includere:
- Utilizzare un indice di testo completo ed eseguire la ricerca in una procedura.
- Usa
EqualsoStartsWithinvece, se possibile per il tuo compito - Cambiare le regole di confronto predefinite della colonna?