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
LOWERbukannya=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
EqualsatauStartsWithsebagai gantinya, jika memungkinkan untuk tugas Anda - Ubah susunan default kolom?