Csharp/C#教程:使用Entity Framework搜索数据库时忽略重音分享


使用Entity Framework搜索数据库时忽略重音

我有一个数据库表,其中包含带有重音字符的名称。 像ä等。

我需要从包含一些子字符串的表中使用EF4获取所有记录, 而不管重音是什么

所以下面的代码:

 myEntities.Items.Where(i => i.Name.Contains("a")); 

应该返回名称中包含a所有项目,以及包含äâ等所有项目。 这可能吗?

如果在“名称”列上设置了不区分重音的排序顺序,则查询应按要求运行。

设置不区分重音的排序规则将解决问题。

您可以使用下一个查询更改SQL Server和Azure数据库中列的排序规则。

 ALTER TABLE TableName ALTER COLUMN ColumnName NVARCHAR (100) COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI NOT NULL 

SQL_LATIN1_GENERAL_CP1_CI_AI是排序,其中LATIN1_GENERAL是英语(美国), CP1是代码页1252, CI是不区分大小写的,并且AI是重音不敏感的。

我知道这不是那么干净的解决方案,但看完之后我尝试了这样的事情:

 var query = this.DataContext.Users.SqlQuery(string.Format("SELECT * FROM dbo.Users WHERE LastName like '%{0}%' COLLATE Latin1_general_CI_AI", parameters.SearchTerm)); 

之后,您仍然可以在’query’对象上调用方法,如Count,OrderBy,Skip等。

Stuart Dunkeld建议的口音不敏感整理绝对是最好的解决方案……

但也许很高兴知道:

Michael Kaplan曾发表关于剥离变音符号的文章:

 static string RemoveDiacritics(string stIn) { string stFormD = stIn.Normalize(NormalizationForm.FormD); StringBuilder sb = new StringBuilder(); for(int ich = 0; ich < stFormD.Length; ich++) { UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(stFormD[ich]); if(uc != UnicodeCategory.NonSpacingMark) { sb.Append(stFormD[ich]); } } return(sb.ToString().Normalize(NormalizationForm.FormC)); } 

资源

所以你的代码是:

上述就是C#学习教程:使用Entity Framework搜索数据库时忽略重音分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

 myEntities.Items.Where(i => RemoveDiacritics(i.Name).Contains("a")); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1039214.html

(0)
上一篇 2022年1月26日
下一篇 2022年1月26日

精彩推荐