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
LOWERistä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
EqualsellerStartsWithistället, om möjligt för din uppgift - Ändra standardsorteringen för kolumnen?