我拥有并发出了我拥有的sql linq查询。我有一个查询,当您在输入文本框中键入人名时,我必须显示包含该名称的人员列表,但我遇到的问题如下: 一个人的名字可以是这样的 jose ou josé。它的名称相同,但é的名称与é相同。我的查询
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é的人,反之亦然。如果我怀疑jose,那么查询只返回那些名字中有jose的人,并且不会全部返回那些与é有josé的人。有没有人知道如何解决这个问题。谢谢
答案 0 :(得分:0)
您可以使用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;
中得到了很好的解释