Sql Linq搜索查询

时间:2016-03-20 17:02:49

标签: c# sql asp.net-mvc linq asp.net-mvc-5

我拥有并发出了我拥有的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é的人。有没有人知道如何解决这个问题。谢谢

1 个答案:

答案 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;

这在this answer.

中得到了很好的解释