【发布时间】:2019-04-11 19:41:05
【问题描述】:
我遇到了重音词搜索的问题,并在 sql server 中通过用符号 [] 封装元音来解决它,以查找带和不带重音的记录。比如 WHERE Name LIKE '%[aa] ci [oo] n%',这在 SQL server 中效果很好,但是当使用 EF 运算符生成查询时 contains this 会生成一条很奇怪的 SQL 记录,而此时在执行查询时,服务器似乎通过前缀字符“~”来修改搜索概念
我尝试过使用Contains(概念)语句,Contains语句在sql中生成LIKE,但是当它包含符号[]时它会修改字符串,包括在这个符号“~”之间
输入:
string concept = "[aá]cc[ií][oó]n" //-> 适用于 sql server 查询
EF查询:
using (Entities ctx = new Entities())
{
ctx.Database.Log = Console.Write;
var result = ctx.Product.Where(w =w.Name.Contains(concept)).ToList();
return result;
}
生成的sql:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name],
[Extent1].[Description] AS [Description],
[Extent1].[Price] AS [Price]
FROM [dbo].[Product] AS [Extent1]
WHERE [Extent1].[Name] LIKE @p__linq__0 ESCAPE '~'
-- p__linq__0: '%~[aá]cc~[ií]~[oó]n%' (Type = AnsiString, Size = 8000)
"~[aá]cc~[ií]~[oó]n" 与 EF 中的 "[aá]cc[ií][oó]n" 不同 EF中输入的是字符串,执行sql时输入的是AnsiString并设置陌生字符
【问题讨论】:
-
Contains未实现为支持所有可能的模式匹配通配符。使用DbFunctions.Like。
标签: entity-framework character contains diacritics