Jangan pernah menggunakan .ToLower()
untuk melakukan perbandingan case-insensitive. Inilah alasannya:
- Mungkin salah (pemeriksaan klien Anda bisa jadi, katakanlah, Turki, dan susunan DB Anda tidak).
- Ini sangat tidak efisien; SQL yang Dipancarkan
LOWER
bukannya=
dengan susunan yang peka huruf besar/kecil.
Sebagai gantinya, gunakan StringComparison.OrdinalIgnoreCase
atau StringComparison.CurrentCultureIgnoreCase
:
var q = from f in Context.Foos
where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
select f;
Tapi untuk Contains()
ada masalah:Tidak seperti Equals
, StartsWith
, dll., tidak memiliki kelebihan untuk StringComparison
argumen. Mengapa? Pertanyaan bagus; tanya Microsoft.
Itu, dikombinasikan dengan batasan SQL Server pada LOWER
berarti tidak ada cara sederhana untuk melakukan apa yang Anda inginkan.
Solusi yang mungkin dapat dilakukan meliputi:
- Gunakan indeks teks lengkap, dan lakukan pencarian dengan prosedur.
- Gunakan
Equals
atauStartsWith
sebagai gantinya, jika memungkinkan untuk tugas Anda - Ubah susunan default kolom?