sql >> Databasteknik >  >> RDS >> Sqlserver

Linq to Entities :använder ToLower() på NText-fält

Använd aldrig .ToLower() att göra en skiftlägesokänslig jämförelse. Här är anledningen:

  1. Det är möjligen fel (din klientsortering kan vara t.ex. turkisk och din DB-sortering inte).
  2. Det är högt ineffektiv; SQL som sänds ut är LOWER istä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 Equals eller StartsWith istället, om möjligt för din uppgift
  • Ändra standardsorteringen för kolumnen?


  1. Tabellen är för bred för att passa i Markdown-genererad PDF

  2. java.sql.SQLEundantag:ORA-01002:hämtning ur sekvens

  3. MySQL bulk drop tabell där tabell som?

  4. Skapar du en länkad lista eller liknande kö i MySQL?