Verwenden Sie niemals .ToLower()
um einen Vergleich ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen. Hier ist der Grund:
- Es ist möglicherweise falsch (Ihre Client-Kollatierung könnte beispielsweise türkisch sein und Ihre DB-Kollatierung nicht).
- Es ist sehr ineffizient; das ausgegebene SQL ist
LOWER
statt=
mit einer Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung.
Verwenden Sie stattdessen StringComparison.OrdinalIgnoreCase
oder StringComparison.CurrentCultureIgnoreCase
:
var q = from f in Context.Foos
where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
select f;
Aber für Contains()
es gibt ein Problem:Im Gegensatz zu Equals
, StartsWith
usw. hat es keine Überladung für einen StringComparison
Streit. Wieso den? Gute Frage; Fragen Sie Microsoft.
Das, kombiniert mit der Beschränkung von SQL Server auf LOWER
bedeutet, dass es keinen einfachen Weg gibt, das zu tun, was Sie wollen.
Mögliche Problemumgehungen könnten sein:
- Verwenden Sie einen Volltextindex und führen Sie die Suche in einer Prozedur durch.
- Verwenden Sie
Equals
oderStartsWith
stattdessen, wenn dies für Ihre Aufgabe möglich ist - Standardsortierung der Spalte ändern?