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
LOWER
zamiast=
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
Equals
lubStartsWith
zamiast tego, jeśli to możliwe dla twojego zadania - Zmienić domyślne sortowanie kolumny?