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
LOWER
mí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
Equals
neboStartsWith
místo toho, pokud je to možné pro váš úkol - Změnit výchozí řazení sloupce?