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.containskonwertuje naCHARINDEX(), w Oracle i sqlite winstr()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 SQLLIKEwyraż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 :
- Określ sortowanie kolumn podczas tworzenia za pomocą DbContext.OnModelCreating() za pomocą tej sztuczki
- Zastąp swój
string.ContainsprzezEF.Functions.Like() - Lub poczekaj na obiecującą funkcję, która wciąż jest przedmiotem dyskusji:
EF.Functions.Collate()funkcja