PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Entity Framework core — zawiera czy wielkość liter jest rozróżniana lub wielkość liter nie jest rozróżniana?

Kiedyś tak było w przypadku starszych wersji rdzenia EF. Teraz string.Contains rozróżnia wielkość liter i na przykład dla sqlite mapuje do funkcji sqlite `instr()' (nie znam postgresql).

Jeśli chcesz porównywać ciągi znaków bez uwzględniania wielkości liter, masz DbFunctions do wykonania zadań.

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

AKTUALIZUJ @Gert:

Część założenia w pytaniu jest błędna. string.Contains NIE konwertuje na LIKE expression chociaż KIEDYŚ tak było w wersjach ef core <=1.0 (chyba).

  • W SQLServer string.contains konwertuje na CHARINDEX() , w Oracle i sqlite w instr() które domyślnie rozróżniają wielkość liter, CHYBA że sortowanie db lub kolumn jest zdefiniowane inaczej (znowu nie znam postgresql).
  • We wszystkich przypadkach EF.Functions.Like() konwertuje na SQL LIKE wyrażenie, w którym domyślnie nie jest rozróżniana wielkość liter, chyba że db lub sortowanie kolumn jest zdefiniowane inaczej.

Więc tak, wszystko sprowadza się do sortowania, ale - popraw mnie, jeśli się mylę - w pewnym sensie kod może mieć wpływ na wyszukiwanie z uwzględnieniem wielkości liter/niewrażliwości w zależności od tego, której z powyższych metod użyjesz.

Teraz może nie jestem całkowicie na bieżąco, ale nie sądzę, aby migracje rdzenia EF w naturalny sposób zajmowały się sortowaniem DB i chyba że wcześniej utworzyłeś tabelę ręcznie, skończysz z domyślnym sortowaniem (rozróżniana jest wielkość liter dla sqlite i ja szczerze nie wiem dla innych).

Wracając do pierwotnego pytania, masz co najmniej 2 opcje do przeprowadzenia wyszukiwania bez rozróżniania wielkości liter, jeśli nie 3 w przyszłej wersji :

  1. Określ sortowanie kolumn podczas tworzenia za pomocą DbContext.OnModelCreating() za pomocą tej sztuczki
  2. Zastąp swój string.Contains przez EF.Functions.Like()
  3. Lub poczekaj na obiecującą funkcję, która wciąż jest przedmiotem dyskusji:EF.Functions.Collate() funkcja


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Psql nie mógł połączyć się z serwerem:Brak takiego pliku lub katalogu, błąd 5432?

  2. Wyodrębnij rok z daty w PostgreSQL

  3. Sekwencja PostgreSQL oparta na innej kolumnie

  4. Jak przekonwertować typ jsonb PostgreSQL 9.4 na float?

  5. Zainstaluj PHP z Postgresql na MAC za pomocą homebrew