Permintaan pencarian Sql Linq [duplikat]

Saya mengalami dan masalah dengan kueri sql linq yang saya miliki. Saya mempunyai pertanyaan bahwa ketika Anda mengetikkan nama seseorang di kotak teks input saya harus menampilkan daftar orang yang berisi nama itu, tetapi masalah yang saya alami adalah sebagai berikut: nama seseorang bisa terlihat seperti ini jose atau josé. Itu nama yang sama tetapi yang satu dengan é dan yang lainnya tanpa é. Pertanyaan saya

var person = (from p in context.Person
              where p.Name.Contains(personName) || p.Name.StartsWith(personName) || p.Name.EndsWith(personName)                            
                          select p).OrderBy(m => m.Name).ToPagedList(page, 10);
   return person;

Idenya adalah ketika saya menulis pertanyaan, dapatkan semua orang yang memiliki jose dan josé dan sebaliknya. Jika saya menulis jose, kueri hanya mengembalikan orang yang memiliki nama jose di sana dan tidak mengizinkan mengembalikan orang yang memiliki josé dengan é. Adakah yang tahu bagaimana saya bisa mengatasi masalah ini. Terima kasih


person Chico José    schedule 20.03.2016    source sumber
comment
Ngomong-ngomong, p.Name.Contains(personName) menangani StartsWith dan EndsWidth jadi tidak perlu. Bagaimana dengan pertanyaan utama Anda, dari sudut pandang database, nama-nama dalam contoh berbeda.   -  person Ivan Stoev    schedule 20.03.2016
comment
Halo, Namanya sama tetapi yang satu memiliki é dan yang lainnya tidak. Saya harus mengembalikan nama yang memiliki é atau tidak memiliki é. Terima kasih   -  person Chico José    schedule 20.03.2016


Jawaban (1)


Anda dapat menggunakan String.Compare, penggunaan dalam budaya saat ini akan terlihat seperti ini (jika Anda tidak ingin menggunakan budaya Anda saat ini, Anda cukup menggunakan InvariantCulture saja):

if (String.Compare("Jose", "José", CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) == 0)
{
    // both strings are equal
}

Anda harus menerapkan pemeriksaan ini langsung ke kueri LINQ Anda seperti ini:

var person = (from p in context.Person
              where String.Compare(p.Name, personName, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) == 0                        
                          select p).OrderBy(m => m.Name).ToPagedList(page, 10);
return person;

Ini semua dijelaskan dengan sangat baik di jawaban ini.

person Peroxy    schedule 20.03.2016
comment
Halo, saya telah mencoba pertanyaan Anda tetapi tidak menghasilkan apa-apa. - person Chico José; 20.03.2016
comment
Coba dan debug kueri dan lihat apa yang sebenarnya terjadi, saya tidak dapat membantu Anda tanpa konteks apa pun. - person Peroxy; 20.03.2016
comment
Ini diterjemahkan menjadi WHERE [t0].[Name] = @p0 sederhana dengan linq2sql, secara efektif mengabaikan semua opsi Bandingkan. - person Antonín Lejsek; 20.03.2016