在linq-to-entities查询中处理重音符号是否有简单方法?

3
假设我有一个汗的数据库。 我可以使用此实体框架代码按名称获取某个汗。
假设我有一个"Khans"的数据库,我可以使用这个Entity Framework代码通过名称获取一个Khan。
Khan khan=context.Khans.Where(x=>x.Name.Contains("Öge")).Single();

问题在于实际使用中,用户会输入"Oge"而不是"Öge",并且无法得到任何匹配结果。是否有一种简单的方法来处理这个问题,使带重音符号的字母在搜索时总是被视为没有重音符号的字母呢?
我找到了一个栈溢出问答,其中提供了Compare方法的解决方案,但似乎无法用于数据库查询。
string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace);

1
一个策略是创建变量集,然后在查询中使用它们所有。 - juharr
1
可能是 LINQ Where Ignore Accentuation and Case 的重复问题。 - Cᴏʀʏ
@Cᴏʀʏ 这个评论应该作为你的答案的一部分,同时使用 juharr 的方法,原帖现在有了三个可能的答案。他可以选择自己认为最好的答案。 - Antoine Pelletier
@AntoinePelletier:我的评论是由于我投票将其关闭为重复而自动添加的。我认为一旦这个问题最终被关闭,将其添加到我的答案中不会有任何好处。 - Cᴏʀʏ
1个回答

6

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

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

在排序名称结尾处的“CI”表示“不区分大小写”,而“AI”表示“不区分重音符号”。

如果更改数据表不是一个选项,那该怎么办? - Deantwo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接