Kode ini peka terhadap huruf besar-kecil, bagaimana membuatnya tidak peka huruf besar kecil?
public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
{
return this.ObjectContext.FACILITY_ITEM.Where(fi => fi.DESCRIPTION.Contains(description));
}
Jawaban:
Dengan asumsi kami bekerja dengan string di sini, berikut ini adalah solusi "elegan" lainnya yang digunakan
IndexOf()
.sumber
sumber
IEqualityComparer<string>
atribut untuk menangani bagaimana perbandingan akan bekerja. Menggunakan ToLower dan ToUpper untuk memeriksa kesetaraan adalah ide yang buruk. Coba:.Contains(description, StringComparer.CurrentCultureIgnoreCase)
misalnyaError 1 'string' does not contain a definition for 'Contains' and the best extension method overload 'System.Linq.ParallelEnumerable.Contains<TSource>(System.Linq.ParallelQuery<TSource>, TSource, System.Collections.Generic.IEqualityComparer<TSource>)' has some invalid arguments
Contains
denganStringComparer
tidak menerima string sebagai parameter, jadi itu akan menjadi kesalahan build.IndexOf
padaQueryable
mungkin tidak dapat diterjemahkan ke dalam SQL. Secara pribadi saya menemukan jawaban ini benar-benar valid ketika kita berbicara tentang LINQ ke basis data.Jika kueri LINQ dieksekusi dalam konteks basis data, panggilan ke
Contains()
dipetakan keLIKE
operator:.Where(a => a.Field.Contains("hello"))
menjadiField LIKE '%hello%'
. TheLIKE
operator adalah kasus sensitif secara default, tapi itu dapat diubah dengan mengubah pengumpulan kolom .Jika kueri LINQ dieksekusi dalam konteks .NET, Anda bisa menggunakan IndexOf () , tetapi metode itu tidak didukung di LINQ ke SQL.
LINQ to SQL tidak mendukung metode yang menggunakan CultureInfo sebagai parameter, mungkin karena tidak dapat menjamin bahwa SQL server menangani budaya yang sama dengan .NET. Ini tidak sepenuhnya benar, karena memang mendukung
StartsWith(string, StringComparison)
.Namun, tampaknya tidak mendukung metode yang mengevaluasi
LIKE
dalam LINQ ke SQL, dan perbandingan kasus yang tidak sensitif dalam.sumber
insensitive
pencarian kasus , dan dalam yang lain saya membutuhkannyacase sensitive
. Apakah saya hanya perlu mengetuk kinerja dan menggunakan 'toLower ()'?Jawaban yang diterima di sini tidak menyebutkan fakta bahwa jika Anda memiliki string null ToLower () akan melempar pengecualian. Cara yang lebih aman adalah dengan melakukan:
sumber
Menggunakan C # 6.0 (yang memungkinkan fungsi ekspresi tubuh dan propagasi nol), untuk LINQ ke Objek, dapat dilakukan dalam satu baris seperti ini (juga memeriksa nol):
sumber
IndexOf bekerja paling baik dalam hal ini
sumber
Anda dapat menggunakan string. Bandingkan
jika Anda hanya ingin memeriksa isi maka gunakan "Apa"
sumber
sumber
sumber
Jujur, ini tidak harus sulit. Mungkin terlihat bahwa pada permulaan, tetapi tidak. Inilah kueri linq sederhana dalam C # yang melakukan persis seperti yang diminta.
Dalam contoh saya, saya bekerja melawan daftar orang yang memiliki satu properti bernama FirstName.
Ini akan mencari database pada pencarian huruf kecil tetapi mengembalikan hasil huruf penuh.
sumber
Gunakan Metode String.Equals
sumber