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
LOWERstatt=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
EqualsoderStartsWithstattdessen, wenn dies für Ihre Aufgabe möglich ist - Standardsortierung der Spalte ändern?