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

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


问题在于,在实践中,用户将键入“ Oge”而不是“Öge”,并且不会获得任何匹配项。有没有一种简单的方法可以解决这个问题,以便带有重音符号的字母始终算作没有重音的字母进行搜索?

我发现this SO question可以为Compare方法提供解决方案,但是我似乎无法将其用于数据库查询:

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

最佳答案

您可能需要将数据库表中字段的排序规则更改为区分大小写和不区分大小写,以使LINQ能够与.Contains()之类的标准方法一起使用:

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


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

关于c# - 是否有一种简单的方法来处理linq-to-entities查询中的重音符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39537218/

10-12 13:08