【问题标题】:Entity Framework linq query to find records with turkish characters实体框架 linq 查询以查找带有土耳其字符的记录
【发布时间】:2017-12-17 19:33:41
【问题描述】:

我需要找到包含特殊土耳其语字符的客户名称。例如,Customer 表是:

Id  Name     Surname
--------------------
1   Şağbüz   Akarca
2   Üleykö   Pancar

我想用这个 linq 查询找到 ID 为 1 的记录:

context.Customers.Select(c => c.Name.Contains('Sagbuz'));

另一个例子:

context.Customers.Select(c => c.Name.Contains('Uleyko'));

这个查询被转换成这个:

SELECT * FROM Customer WHERE Name LIKE N'Sagbuz'

返回未找到任何行。我找不到实现这一目标的方法。

【问题讨论】:

  • 如果你想搜索Şağbüz,为什么要使用Sagbuz
  • 客户名称以 nvarchar 类型存储在数据库中,但对于我的应用程序,有些人搜索没有土耳其字符的名称,因为他们有英文键盘布局(他们也忘记使用土耳其字母),而且他们想找到带有土耳其字母的记录。使用土耳其语键盘布局并使用正确字母搜索单词的人没有问题。
  • 你能改变数据库结构吗?
  • 我做不到
  • 那么你就被限制在这样的事情上stackoverflow.com/a/23212281/1663001

标签: c# sql-server asp.net-mvc entity-framework linq


【解决方案1】:

它与 Linq to Entity 无关。可能,您的数据库配置为 AS(Accent Sensitive)。因此,尝试执行以下查询;

SELECT * FROM Customer WHERE Name LIKE N'Sagbuz' COLLATE Latin1_General_CI_AI

将返回Şağbüz 的结果。

另外,请注意尝试更改 sql server 的排序规则可能会影响整个表和记录。

【讨论】:

  • 谢谢你使用 linq 直接,我使用了 context.Customers.SqlQuery('');
【解决方案2】:

你应该使用“where”而不是“select”:

context.Customers.Where(c => c.Name.Contains('Sagbuz'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2014-10-13
    相关资源
    最近更新 更多