【问题标题】:Sql Linq search query [duplicate]Sql Linq搜索查询[重复]
【发布时间】:2016-07-07 02:49:01
【问题描述】:

我有一个我拥有的 sql linq 查询并遇到了问题。我有一个查询,当您在输入文本框中键入人名时,我必须显示包含该姓名的人员列表,但我遇到的问题如下: 人名可能看起来像 josejosé。它的名称相同,但一个带有 é 另一个没有 é。我的查询

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;

这个想法是当我 wright jose 查询时得到所有拥有 jose 和 josé 的人,反之亦然。如果我 wright jose,则该查询仅返回名称中有 jose 的人,并且不会返回带有 é 的 josé 的人。有谁知道我该如何解决这个问题。谢谢

【问题讨论】:

  • 顺便说一句,p.Name.Contains(personName) 处理 StartsWithEndsWidth 所以不需要它们。您的主要问题呢,从数据库的角度来看,示例中的名称不同。
  • 您好,名称相同,但一个有é,另一个没有。我必须返回有 é 或没有 é 的名称。谢谢

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


【解决方案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;

这在this answer.中得到了很好的解释

【讨论】:

  • 您好,我已经尝试过您的查询,但没有返回任何信息。
  • 尝试调试查询并查看实际发生的情况,如果没有任何上下文,我无法为您提供帮助。
  • 它转换为简单的 WHERE [t0].[Name] = @p0 with linq2sql,有效地忽略了 Compare 的所有选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多