Använd aldrig .ToLower()
att göra en skiftlägesokänslig jämförelse. Här är anledningen:
- Det är möjligen fel (din klientsortering kan vara t.ex. turkisk och din DB-sortering inte).
- Det är högt ineffektiv; SQL som sänds ut är
LOWER
istället för=
med en skiftlägesokänslig sortering.
Använd istället StringComparison.OrdinalIgnoreCase
eller StringComparison.CurrentCultureIgnoreCase
:
var q = from f in Context.Foos
where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
select f;
Men för Contains()
det finns ett problem:Till skillnad från Equals
, StartsWith
, etc., har den ingen överbelastning för en StringComparison
argument. Varför? Bra fråga; fråga Microsoft.
Det, i kombination med SQL Servers begränsning på LOWER
betyder att det inte finns något enkelt sätt att göra vad du vill.
Möjliga lösningar kan vara:
- Använd ett fulltextindex och gör sökningen i en procedur.
- Använd
Equals
ellerStartsWith
istället, om möjligt för din uppgift - Ändra standardsorteringen för kolumnen?