Nigdy nie używaj .ToLower() wykonać porównanie bez rozróżniania wielkości liter. Oto dlaczego:
- Prawdopodobnie jest źle (twój klient może być, powiedzmy, turecki, a twój DB nie).
- Jest bardzo nieskuteczny; Emitowany kod SQL to
LOWERzamiast=z sortowaniem bez rozróżniania wielkości liter.
Zamiast tego użyj StringComparison.OrdinalIgnoreCase lub StringComparison.CurrentCultureIgnoreCase :
var q = from f in Context.Foos
where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
select f;
Ale dla Contains() jest problem:w przeciwieństwie do Equals , StartsWith itp., nie ma przeciążenia dla StringComparison argument. Czemu? Dobre pytanie; zapytaj Microsoft.
To w połączeniu z ograniczeniami SQL Server dotyczącymi LOWER oznacza, że nie ma prostego sposobu na zrobienie tego, co chcesz.
Możliwe obejścia mogą obejmować:
- Użyj indeksu pełnotekstowego i przeprowadź wyszukiwanie zgodnie z procedurą.
- Użyj
EqualslubStartsWithzamiast tego, jeśli to możliwe dla twojego zadania - Zmienić domyślne sortowanie kolumny?