Mencapai Perbandingan Sensitif Kes dalam LINQ dengan Entiti
Pertanyaan LINQ kepada Entiti, seperti Thingies.First(t => t.Name == "ThingamaBob")
, mungkin tidak sensitif huruf besar-besaran secara lalai. Ini disebabkan oleh LINQ kepada Entiti yang menterjemah ungkapan Lambda ke dalam SQL, dengan kepekaan huruf besar bergantung pada tetapan pengumpulan pangkalan data SQL Server.
Penyelesaian Peringkat Pangkalan Data: Mengubah Suai Pengumpulan
Cara paling berkesan untuk memastikan perbandingan sensitif huruf besar-besaran adalah dengan mengubah susunan lajur kepada pilihan sensitif huruf besar-besaran. Sebagai contoh, untuk menjadikan lajur Name
dalam Thingies
jadual sensitif huruf besar-kecil, gunakan arahan SQL ini:
<code class="language-sql">ALTER TABLE Thingies ALTER COLUMN Name VARCHAR(25) COLLATE Latin1_General_CS_AS</code>
Pendekatan Sisi Pelanggan: Menggunakan LINQ untuk Objek
Jika pengubahsuaian pengumpulan pangkalan data tidak dapat dilaksanakan, penyelesaian pihak klien menggunakan LINQ to Objects menyediakan alternatif. Ini melibatkan pertanyaan pangkalan data awal diikuti dengan perbandingan dalam memori menggunakan AsEnumerable()
. Contoh:
<code class="language-csharp">Thingies.Where(t => t.Name == "ThingamaBob") .AsEnumerable() .First(t => t.Name == "ThingamaBob");</code>
Ini melakukan semakan sensitif huruf besar dalam memori selepas penapisan pangkalan data awal. Ambil perhatian bahawa kaedah ini mungkin kurang berprestasi berbanding perubahan penyusunan bahagian pelayan.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Perbandingan Sensitif Kes dalam LINQ dengan Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!