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 tilCHARINDEX()
, i oracle og sqlite ind iinstr()
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 SQLLIKE
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:
- Angiv kolonnesorteringen ved oprettelse ved hjælp af DbContext.OnModelCreating() ved hjælp af dette trick
- Erstat din
string.Contains
afEF.Functions.Like()
- Eller vent på en lovende funktion, der stadig er i diskussion:
EF.Functions.Collate()
funktion