我对重音词搜索有问题,并在sql server中通过用符号[]封装元音来查找带重音和不带重音的记录来解决了这个问题。例如,WHERE Name LIKE'%[aa] ci [oo] n%',在SQL Server中效果很好,但是当使用操作符EF用EF生成查询时,包含此内容会生成一个非常奇怪的SQL记录,并且此刻执行查询的过程中,服务器似乎通过在字符前面加上“〜”来修改搜索概念
我尝试使用包含语句(concepts),包含语句在sql中生成LIKE,但是当包含符号[]时,它会修改字符串,包括在该符号“〜”之间
输入:
string concept =“ [aá] cc [ií] [oó] n” //->可在sql服务器查询中使用
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并设置陌生字符
答案 0 :(得分:0)
SQL Server使用方括号作为通配符表达式搜索的一部分,因此,如果要以字符串形式搜索方括号,则需要对其进行转义。使用.Contains()
会导致查询类似,但EF会将表达式视为“%value%”的文字,因此它将转义任何方括号或通配符。
EF正在使用Tilde对其进行转义,因此它在生成的脚本中将Tilde注册为转义字符。
https://www.techonthenet.com/sql_server/like.php
由于要对通配符式操作使用[],因此需要在括号表达式中使用DbFunctions.Like
。
var result = ctx.Product.Where(w=> DbFunctions.Like(w.Name, concept)).ToList();