Никога не използвайте .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вместо това, ако е възможно за вашата задача - Промяна на сортирането по подразбиране на колоната?