sql >> Database teknologi >  >> RDS >> PostgreSQL

Entity Framework kerne - Indeholder er der forskel på store og små bogstaver eller ufølsom?

Det plejede at være tilfældet for ældre versioner af EF-kerne. Nu string.Contains er forskel på store og små bogstaver, og for eksempel for sqlite er det maps til sqlite-funktionen `instr()' (jeg kender ikke til postgresql).

Hvis du vil sammenligne strenge på en måde, hvor der ikke skelnes mellem store og små bogstaver, har du DbFunctions til at udføre opgaverne.

context.Counties.Where(x => EF.Functions.Like(x.Name, $"%{keyword}%")).ToList();

OPDATERING til @Gert:

En del af antagelsen i spørgsmålet er forkert. string.Contains konverterer IKKE til et LIKE expression selvom det plejede at være tilfældet i ef-kerneversioner <=1.0 (tror jeg).

  • I SQLServer string.contains konverteres til CHARINDEX() , i oracle og sqlite ind i instr() som som standard skelner mellem store og små bogstaver, MEDMINDRE db eller kolonnesortering er defineret på anden måde (Igen, jeg kender ikke til postgresql).
  • I alle tilfælde EF.Functions.Like() konverterer til en SQL LIKE udtryk, der som standard ikke skelner mellem store og små bogstaver, medmindre db eller kolonnesortering er defineret på anden måde.

Så ja, det hele går ned til sortering, men - ret mig hvis jeg tager fejl - på en måde kan koden have indflydelse på den store og små bogstaver/ufølsomme søgning afhængigt af hvilken af ​​ovenstående metoder du bruger.

Nu er jeg måske ikke helt opdateret, men jeg tror ikke, at EF-kernemigrering håndterer DB-sortering naturligt, og medmindre du allerede har oprettet tabellen manuelt, vil du ende med standardsorteringen (der skelnes mellem store og små bogstaver for sqlite og jeg ved ærlig talt ikke for de andre).

Når du vender tilbage til det oprindelige spørgsmål, har du mindst 2 muligheder for at udføre denne søgning uden store og små bogstaver, hvis ikke 3 i en fremtidig udgivelse:

  1. Angiv kolonnesorteringen ved oprettelse ved hjælp af DbContext.OnModelCreating() ved hjælp af dette trick
  2. Erstat din string.Contains af EF.Functions.Like()
  3. Eller vent på en lovende funktion, der stadig er i diskussion:EF.Functions.Collate() funktion


  1. Grundlæggende om tabeludtryk, del 6 – Rekursive CTE'er

  2. Hold orden fra 'IN'-klausulen

  3. Sådan opretter du en pivot-forespørgsel i sql-server uden aggregeret funktion

  4. Hvordan importerer jeg moduler eller installerer udvidelser i Postgres?