【问题标题】:Is there an easy way to handle accent marks in linq-to-entities queries有没有一种简单的方法来处理 linq-to-entities 查询中的重音符号
【发布时间】:2017-01-25 00:30:20
【问题描述】:

假设我有一个可汗数据库。我可以使用此实体框架代码按名称获取可汗

Khan khan=context.Khans.Where(x=>x.Name.Contains("Öge")).Single();

问题在于,实际上用户会键入“Oge”而不是“Öge”,并且不会得到任何匹配项。有没有一种简单的方法来处理这个问题,让带有重音符号的字母在搜索时始终算作没有重音符号的字母?

我发现this SO questionCompare 方法的解决方案,但我似乎无法将其用于数据库查询:

string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace);

【问题讨论】:

  • 一种策略是创建一组变体,然后在查询中使用所有变体。
  • @Cᴏʀʏ 此评论应该是您答案的一部分,同样使用 juharr 的方法,OP 现在对他的问题有 3 个可能的答案。他可以选择他认为最好的。
  • @AntoinePelletier:我的评论是由于我的重复投票而自动添加的。一旦这个问题最终得到解决,我认为将其添加到我的答案中不会有任何好处。

标签: c# sql entity-framework linq-to-entities


【解决方案1】:

您可能需要将数据库表中的字段排序规则更改为不区分大小写和重音,以便 LINQ 使用标准方法,例如 .Contains()

ALTER TABLE Khans ALTER COLUMN Name [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AI

排序规则名称末尾的“CI”表示“不区分大小写”,“AI”表示“不区分重音”。

【讨论】:

  • 如果无法更改数据表怎么办?
猜你喜欢
  • 2023-04-07
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
相关资源
最近更新 更多