Dulu kasus untuk versi EF core yang lebih lama. Sekarang string.Contains
peka huruf besar/kecil, dan sebagai contoh untuk sqlite, peta ini dipetakan ke fungsi sqlite `instr()' (saya tidak tahu untuk postgresql).
Jika Anda ingin membandingkan string dengan cara yang tidak peka huruf besar/kecil, Anda memiliki DbFunctions untuk melakukan tugas tersebut.
context.Counties.Where(x => EF.Functions.Like(x.Name, $"%{keyword}%")).ToList();
PERBARUI ke @Gert:
Sebagian dari asumsi dalam pertanyaan tidak benar. string.Contains
TIDAK diubah menjadi LIKE expression
meskipun itu digunakan untuk menjadi kasus di ef core versi <=1.0 (menurut saya).
- Dalam SQLServer
string.contains
diubah menjadiCHARINDEX()
, di Oracle dan sqlite keinstr()
yang peka huruf besar/kecil secara default KECUALI db atau susunan kolom didefinisikan sebaliknya ( Sekali lagi, saya tidak tahu untuk postgresql ). - Dalam semua kasus
EF.Functions.Like()
diubah menjadi SQLLIKE
ekspresi yang tidak peka huruf besar/kecil secara default kecuali db atau susunan kolom didefinisikan sebaliknya.
Jadi ya, semuanya tergantung pada pemeriksaan tetapi - koreksi saya jika saya salah - dengan cara tertentu kode dapat memengaruhi pencarian peka huruf besar/kecil tergantung pada salah satu metode di atas yang Anda gunakan.
Sekarang, saya mungkin tidak sepenuhnya mutakhir, tetapi saya tidak berpikir migrasi inti EF berurusan dengan susunan DB secara alami dan kecuali Anda telah membuat tabel secara manual, Anda akan berakhir dengan susunan default (peka huruf besar-kecil untuk sqlite dan saya sejujurnya tidak tahu untuk yang lain).
Kembali ke pertanyaan awal, Anda memiliki setidaknya 2 opsi untuk melakukan pencarian peka huruf besar-kecil ini jika tidak 3 di rilis mendatang :
- Tentukan susunan kolom pada pembuatan menggunakan DbContext.OnModelCreating() menggunakan trik ini
- Ganti
string.Contains
your Anda olehEF.Functions.Like()
- Atau tunggu fitur menjanjikan yang masih dalam diskusi :
EF.Functions.Collate()
fungsi