Nikdy nepoužívejte .ToLower() k provedení srovnání bez rozlišení velkých a malých písmen. Zde je důvod:
- Možná je to špatně (vaše řazení klientů může být řekněme turečtina, a řazení DB nikoli).
- Je to vysoce neefektivní; SQL Emitted je
LOWERmísto=s řazením bez rozlišení malých a velkých písmen.
Místo toho použijte StringComparison.OrdinalIgnoreCase nebo StringComparison.CurrentCultureIgnoreCase :
var q = from f in Context.Foos
where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
select f;
Ale pro Contains() je tu problém:Na rozdíl od Equals , StartsWith , atd., nemá přetížení pro StringComparison argument. Proč? Dobrá otázka; zeptejte se Microsoftu.
To v kombinaci s omezením SQL Serveru na LOWER znamená, že neexistuje jednoduchý způsob, jak dělat to, co chcete.
Možná řešení mohou zahrnovat:
- Použijte fulltextový index a proveďte vyhledávání v proceduře.
- Použijte
EqualsneboStartsWithmísto toho, pokud je to možné pro váš úkol - Změnit výchozí řazení sloupce?