Brug aldrig .ToLower()
at udføre en sammenligning uden store og små bogstaver. Her er grunden:
- Det er muligvis forkert (din klientsortering kunne f.eks. være tyrkisk, og din DB-sortering ikke).
- Det er højt ineffektiv; den udsendte SQL er
LOWER
i stedet for=
med en sortering, der ikke skelner mellem store og små bogstaver.
Brug i stedet StringComparison.OrdinalIgnoreCase
eller StringComparison.CurrentCultureIgnoreCase
:
var q = from f in Context.Foos
where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
select f;
Men for Contains()
der er et problem:I modsætning til Equals
, StartsWith
osv., har den ikke en overbelastning for en StringComparison
argument. Hvorfor? Godt spørgsmål; spørg Microsoft.
Det kombineret med SQL Servers begrænsning på LOWER
betyder, at der ikke er nogen enkel måde at gøre, hvad du vil.
Mulige løsninger kan omfatte:
- Brug et fuldtekstindeks, og foretag søgningen i en procedure.
- Brug
Equals
ellerStartsWith
i stedet, hvis det er muligt for din opgave - Vil du ændre standardsorteringen af kolonnen?