คำค้นหา Sql Linq [ซ้ำกัน]

ฉันมีและมีปัญหากับแบบสอบถาม sql linq ที่ฉันมี ฉันมีคำถามว่าเมื่อคุณพิมพ์ชื่อบุคคลในกล่องข้อความอินพุต ฉันต้องแสดงรายการบุคคลที่มีชื่อนั้น แต่ปัญหาที่ฉันมีคือ: ชื่อบุคคลสามารถมีลักษณะเช่นนี้ โฮเซ่ อู โฮเซ่. เป็นชื่อเดียวกันแต่เป็นชื่อที่มี é และอีกชื่อหนึ่งไม่มี é แบบสอบถามของฉัน

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;

แนวคิดคือเมื่อฉันเขียนแบบสอบถามให้ทุกคนที่มีโฮเซ่และโฮเซ่และในทางกลับกัน ถ้าฉันเขียน jose แบบสอบถามจะส่งคืนเฉพาะคนที่มี jose ในชื่อนั้นและไม่อนุญาตให้ส่งคืนผู้ที่มี josé ด้วย é ไม่มีใครรู้ว่าฉันสามารถแก้ไขปัญหานี้ได้อย่างไร ขอบคุณ


person Chico José    schedule 20.03.2016    source แหล่งที่มา
comment
อย่างไรก็ตาม p.Name.Contains(personName) จัดการ StartsWith และ EndsWidth ดังนั้นจึงไม่จำเป็นต้องใช้มัน แล้วคำถามหลักของคุณล่ะ จากมุมมองของฐานข้อมูล ชื่อในตัวอย่างนั้นแตกต่างกัน   -  person Ivan Stoev    schedule 20.03.2016
comment
สวัสดี ชื่อเหมือนกันแต่ชื่อหนึ่งมี é อีกชื่อหนึ่งไม่มี ฉันต้องคืนชื่อที่มีéหรือไม่มีé ขอบคุณ   -  person Chico José    schedule 20.03.2016


คำตอบ (1)


คุณสามารถใช้ String.Compare การใช้งานในวัฒนธรรมปัจจุบันจะมีลักษณะเช่นนี้ (หากคุณไม่ต้องการใช้วัฒนธรรมปัจจุบันของคุณ คุณสามารถใช้ InvariantCulture แทนได้):

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

คุณจะต้องใช้การตรวจสอบนี้โดยตรงกับแบบสอบถาม linq ของคุณดังนี้:

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;

ทั้งหมดนี้อธิบายไว้อย่างดีในคำตอบนี้

person Peroxy    schedule 20.03.2016
comment
สวัสดี ฉันได้ลองค้นหาของคุณแล้ว แต่กลับไม่แจ้งอะไรเลย - person Chico José; 20.03.2016
comment
ลองแก้ไขคำค้นหาแล้วดูว่าเกิดอะไรขึ้น ฉันไม่สามารถช่วยคุณได้หากไม่มีบริบท - person Peroxy; 20.03.2016
comment
มันแปลเป็นภาษาง่าย ๆ WHERE [t0].[Name] = @p0 ด้วย linq2sql โดยไม่สนใจตัวเลือกทั้งหมดของ Compare อย่างมีประสิทธิภาพ - person Antonín Lejsek; 20.03.2016