使用 EF6 和 SQL Server 2008 R2 进行不区分重音的搜索 - 捷克语
Accent insensitive search using EF6 and SQL Server 2008 R2 - Czech language
如何使用 SQL Server 2008 R2 和 EF 6 进行不区分重音的搜索查询?
我需要使用 Entity framework 对 user.name
列进行不区分重音的搜索 6. 我尝试将列的排序规则从默认 Czech_CI_AS
更改为 Czech_CI_AI
.但它不适用于某些带有楔形的捷克字母,如 Č、Ř、Š、Ž,因为排序规则将它们视为不同的字母:
http://collation-charts.org/mssql/mssql.0405.1250.Czech_CI_AI.html
我在这里发现了类似的问题:
但是建议的使用排序规则的解决方案 Czech_100_CI_AI
也不起作用(对于那些特殊字母)。
我也找到了一些如何在普通 T-SQL 中做到这一点的资源。像这样:
SELECT *
FROM [dbo].[User]
WHERE name LIKE '%c%' COLLATE Latin1_General_CI_AI
它工作正常。但我不想使用普通的 SQL 查询。我想用 EF 的方式来管理它。
我最终得到了这个解决方案:
创建包含两列的视图 - 一列用于搜索,第二列用于演示(拉丁语排序规则将从结果中删除一些重音符号)。
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 上下文中的视图创建数据库映射。
在 EF 中使用 FirstNameCI
列进行搜索。
if (!string.IsNullOrWhiteSpace(filter.FirstName))
query = query.Where(x => x.c.FirstNameCI.StartsWith(filter.FirstName));
使用 FirstName
列进行演示。
在Entity Framework中,当你在IQueryable
中的where()
扩展方法中使用Contains()
方法时,它被翻译成where
子句和[=14] =] SQL 中的运算符。所以我想这就是你要找的。可以参考.
如何使用 SQL Server 2008 R2 和 EF 6 进行不区分重音的搜索查询?
我需要使用 Entity framework 对 user.name
列进行不区分重音的搜索 6. 我尝试将列的排序规则从默认 Czech_CI_AS
更改为 Czech_CI_AI
.但它不适用于某些带有楔形的捷克字母,如 Č、Ř、Š、Ž,因为排序规则将它们视为不同的字母:
http://collation-charts.org/mssql/mssql.0405.1250.Czech_CI_AI.html
我在这里发现了类似的问题:
但是建议的使用排序规则的解决方案 Czech_100_CI_AI
也不起作用(对于那些特殊字母)。
我也找到了一些如何在普通 T-SQL 中做到这一点的资源。像这样:
SELECT *
FROM [dbo].[User]
WHERE name LIKE '%c%' COLLATE Latin1_General_CI_AI
它工作正常。但我不想使用普通的 SQL 查询。我想用 EF 的方式来管理它。
我最终得到了这个解决方案:
创建包含两列的视图 - 一列用于搜索,第二列用于演示(拉丁语排序规则将从结果中删除一些重音符号)。
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 上下文中的视图创建数据库映射。
在 EF 中使用 FirstNameCI
列进行搜索。
if (!string.IsNullOrWhiteSpace(filter.FirstName))
query = query.Where(x => x.c.FirstNameCI.StartsWith(filter.FirstName));
使用 FirstName
列进行演示。
在Entity Framework中,当你在IQueryable
中的where()
扩展方法中使用Contains()
方法时,它被翻译成where
子句和[=14] =] SQL 中的运算符。所以我想这就是你要找的。可以参考