首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用EF6和Server 2008 R2 -捷克语言的重音不敏感搜索

使用EF6和Server 2008 R2 -捷克语言的重音不敏感搜索
EN

Stack Overflow用户
提问于 2018-02-20 15:41:57
回答 2查看 489关注 0票数 1

如何使用Server 2008 R2和EF 6进行重音不敏感的搜索查询?

我需要使用实体框架6对user.name列进行重音不敏感的搜索,我尝试将列上的排序规则从默认的Czech_CI_AS更改为Czech_CI_AI。但它不适用于一些带有楔形的捷克字母,比如Č,Ř,Š,Ž,因为排序规则将它们视为不同的字母:

AI.html

我在这里发现了类似的问题:

How do I perform an accent insensitive compare in SQL Server for 1250 codepage

但是所建议的使用排序规则Czech_100_CI_AI的解决方案也不起作用(对于那些特殊的字母)。

我也发现了很少的资料来源,如何在普通的T中做这件事。如下所示:

代码语言:javascript
运行
复制
SELECT * 
FROM [dbo].[User] 
WHERE name LIKE '%c%' COLLATE Latin1_General_CI_AI

效果很好。但是我不想使用普通的SQL查询。我想用EF的方式来管理它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-20 15:41:57

我最终得到了这样的解决方案:

创建带有两列的视图--一列用于搜索,第二列用于表示(拉丁排序规则将从结果中删除一些重音)。

代码语言:javascript
运行
复制
CREATE VIEW [dbo].[v_UserSearch]
AS
SELECT    
           dbo.[User].name AS FirstName,
           dbo.[User].name COLLATE Latin1_General_CI_AI AS FirstNameCI
FROM       dbo.[User]  

为EF上下文中的视图创建DB映射。

在EF中使用FirstNameCI列进行搜索。

代码语言:javascript
运行
复制
if (!string.IsNullOrWhiteSpace(filter.FirstName))
   query = query.Where(x => x.c.FirstNameCI.StartsWith(filter.FirstName));

使用FirstName列表示。

票数 3
EN

Stack Overflow用户

发布于 2018-02-20 15:53:48

在实体框架中,当您在Contains()中的where()扩展方法中使用IQueryable方法时,它将被转换为带有like操作符的where子句。所以我想这就是你要找的。您可以参考this SO question

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48888969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档