sql >> Database teknologi >  >> RDS >> Sqlserver

Linq to Entities:ved hjælp af ToLower() på NText-felter

Brug aldrig .ToLower() at udføre en sammenligning uden store og små bogstaver. Her er grunden:

  1. Det er muligvis forkert (din klientsortering kunne f.eks. være tyrkisk, og din DB-sortering ikke).
  2. Det er højt ineffektiv; den udsendte SQL er LOWER i stedet for = med en sortering, der ikke skelner mellem store og små bogstaver.

Brug i stedet StringComparison.OrdinalIgnoreCase eller StringComparison.CurrentCultureIgnoreCase :

var q = from f in Context.Foos
        where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
        select f;

Men for Contains() der er et problem:I modsætning til Equals , StartsWith osv., har den ikke en overbelastning for en StringComparison argument. Hvorfor? Godt spørgsmål; spørg Microsoft.

Det kombineret med SQL Servers begrænsning på LOWER betyder, at der ikke er nogen enkel måde at gøre, hvad du vil.

Mulige løsninger kan omfatte:

  • Brug et fuldtekstindeks, og foretag søgningen i en procedure.
  • Brug Equals eller StartsWith i stedet, hvis det er muligt for din opgave
  • Vil du ændre standardsorteringen af ​​kolonnen?


  1. Et til et forhold i MySQL

  2. MySQL-pivottabelforespørgsel med dynamiske kolonner, der afkorter nøgleværdi

  3. indre join og hvor i() klausul ydeevne?

  4. Sådan tilslutter du dig på flere kolonner