Gebruik nooit .ToLower()
om een hoofdletterongevoelige vergelijking uit te voeren. Dit is waarom:
- Het is mogelijk verkeerd (uw client-sortering kan bijvoorbeeld Turks zijn, en uw database-sortering niet).
- Het is zeer inefficiënt; de uitgezonden SQL is
LOWER
in plaats van=
met een hoofdletterongevoelige sortering.
Gebruik in plaats daarvan StringComparison.OrdinalIgnoreCase
of StringComparison.CurrentCultureIgnoreCase
:
var q = from f in Context.Foos
where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
select f;
Maar voor Contains()
er is een probleem:in tegenstelling tot Equals
, StartsWith
, enz., heeft het geen overbelasting voor een StringComparison
argument. Waarom? Goede vraag; vraag het Microsoft.
Dat, gecombineerd met de beperking van SQL Server op LOWER
betekent dat er geen eenvoudige manier is om te doen wat je wilt.
Mogelijke oplossingen zijn onder meer:
- Gebruik een volledige tekstindex en zoek in een procedure.
- Gebruik
Equals
ofStartsWith
in plaats daarvan, indien mogelijk voor uw taak - De standaardsortering van de kolom wijzigen?