sql >> Databáze >  >> RDS >> PostgreSQL

Jádro Entity Framework – Obsahuje Rozlišují se malá a velká písmena?

Dříve tomu tak bylo u starších verzí jádra EF. Nyní string.Contains rozlišuje velká a malá písmena a například pro sqlite se mapuje na funkci sqlite `instr()' (nevím pro postgresql).

Pokud chcete porovnávat řetězce způsobem bez rozlišení velkých a malých písmen, máte k dispozici DbFunctions.

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

AKTUALIZACE na @Gert:

Část předpokladu v otázce je nesprávná. string.Contains NEkonvertuje na LIKE expression i když to BYLO v případě ef core verzí <=1.0 (myslím).

  • V SQLServeru string.contains převede na CHARINDEX() , v oracle a sqlite do instr() které ve výchozím nastavení rozlišují velká a malá písmena, POKUD není řazení db nebo sloupců definováno jinak (Opět nevím pro postgresql).
  • Ve všech případech EF.Functions.Like() převede na SQL LIKE výraz, který ve výchozím nastavení nerozlišuje velká a malá písmena, pokud není řazení db nebo sloupců definováno jinak.

Takže ano, všechno jde až na řazení, ale - opravte mě, pokud se mýlím - kód může svým způsobem ovlivnit vyhledávání rozlišující malá a velká písmena v závislosti na tom, kterou z výše uvedených metod používáte.

Možná nejsem úplně aktuální, ale nemyslím si, že migrace jádra EF se s řazením DB přirozeně zabývají, a pokud jste tabulku nevytvořili ručně, skončíte s výchozím řazením (rozlišují se malá a velká písmena pro sqlite a já upřímně nevím pro ostatní).

Vraťte se k původní otázce, máte alespoň 2 možnosti, jak provést toto vyhledávání bez rozlišení velkých a malých písmen, pokud ne 3 v budoucí verzi:

  1. Upřesněte řazení sloupců při vytváření pomocí DbContext.OnModelCreating() pomocí tohoto triku
  2. Nahraďte svůj string.Contains pomocí EF.Functions.Like()
  3. Nebo počkejte na slibnou funkci, o které se stále diskutuje:EF.Functions.Collate() funkce


  1. Jak přidat offset ve výběrovém dotazu v Oracle 11g?

  2. Postgres UUID JDBC nefunguje

  3. SQL Server 2008:Jak udělím oprávnění uživatelskému jménu?

  4. Vnořené funkce okna v SQL