Era il caso delle versioni precedenti di EF core. Ora string.Contains
fa distinzione tra maiuscole e minuscole e, ad esempio, per sqlite si associa alla funzione sqlite `instr()' (non so per postgresql).
Se vuoi confrontare le stringhe senza distinzione tra maiuscole e minuscole, hai DbFunctions per fare il lavoro.
context.Counties.Where(x => EF.Functions.Like(x.Name, $"%{keyword}%")).ToList();
AGGIORNA a @Gert:
Una parte dell'ipotesi nella domanda è errata. string.Contains
NON si converte in un LIKE expression
anche se era il caso delle versioni ef core <=1.0 (credo).
- In SQLServer
string.contains
converte inCHARINDEX()
, in Oracle e sqlite ininstr()
che fanno distinzione tra maiuscole e minuscole per impostazione predefinita A MENO CHE le regole di confronto db o colonne non siano definite diversamente (Anche in questo caso, non lo so per postgresql). - In tutti i casi
EF.Functions.Like()
converte in un SQLLIKE
espressione che non fa distinzione tra maiuscole e minuscole per impostazione predefinita, a meno che le regole di confronto db o colonne non siano definite diversamente.
Quindi sì, tutto si riduce alle regole di confronto ma - correggimi se sbaglio - in un certo senso il codice può avere un'influenza sulla ricerca con distinzione tra maiuscole e minuscole/non sensibile a seconda di quale dei metodi precedenti utilizzi.
Ora, potrei non essere completamente aggiornato, ma non credo che le migrazioni di base EF gestiscano le regole di confronto DB in modo naturale e, a meno che tu non abbia già creato la tabella manualmente, ti ritroverai con le regole di confronto predefinite (con distinzione tra maiuscole e minuscole per sqlite e I sinceramente non so per gli altri).
Tornando alla domanda originale, hai almeno 2 opzioni per eseguire questa ricerca senza distinzione tra maiuscole e minuscole se non 3 in una versione futura:
- Specifica le regole di confronto delle colonne durante la creazione utilizzando DbContext.OnModelCreating() usando questo trucco
- Sostituisci il tuo
string.Contains
diEF.Functions.Like()
- Oppure aspetta una funzione promettente ancora in discussione:
EF.Functions.Collate()
funzione