Никога не използвайте .ToLower()
за извършване на сравнение без разлика на главни и малки букви. Ето защо:
- Възможно е да е грешно (клиентското ви сравняване може да е, да кажем, турско, а сравняването на вашата база данни не).
- Това е високо неефикасен; Излъченият SQL е
LOWER
вместо=
с подреждане без разлика на главни и малки букви.
Вместо това използвайте StringComparison.OrdinalIgnoreCase
или StringComparison.CurrentCultureIgnoreCase
:
var q = from f in Context.Foos
where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
select f;
Но за Contains()
има проблем:За разлика от Equals
, StartsWith
и т.н., той няма претоварване за StringComparison
аргумент. Защо? Добър въпрос; попитайте Microsoft.
Това, комбинирано с ограничението на SQL Server за LOWER
означава, че няма лесен начин да направите това, което искате.
Възможните заобиколни решения може да включват:
- Използвайте пълен текстов индекс и направете търсенето в процедура.
- Използвайте
Equals
илиStartsWith
вместо това, ако е възможно за вашата задача - Промяна на сортирането по подразбиране на колоната?