C# 有没有方法将EF.Functions.Like与ESCAPE sql关键字一起使用以防止通配符

C# 有没有方法将EF.Functions.Like与ESCAPE sql关键字一起使用以防止通配符,c#,sql,.net,sql-server,entity-framework,C#,Sql,.net,Sql Server,Entity Framework,因此,我对一个带有varchar字段的表实现了一个搜索函数,该字段包含文本,通常带有简单字符串,但其中一些包含“[text]”,包括括号 对于筛选函数,我使用实体框架并尝试使用EF.Functions.Like: objects = objects.Where(t => EF.Functions.Like(t.name, "%" + param.Request.Name + "%")); 问题是object.name包含这些括号是因为它触发了SQL字符表通配符,所以上面返回0个结果;我找

因此,我对一个带有varchar字段的表实现了一个搜索函数,该字段包含文本,通常带有简单字符串,但其中一些包含“[text]”,包括括号

对于筛选函数,我使用实体框架并尝试使用EF.Functions.Like:

objects = objects.Where(t => EF.Functions.Like(t.name, "%" + param.Request.Name + "%"));
问题是object.name包含这些括号是因为它触发了SQL字符表通配符,所以上面返回0个结果;我找不到任何关于如何将其与SQL ESCAPE关键字结合使用的信息,例如:

...WHERE NAME LIKE '%PRETEXT_\[TEXT\]%' ESCAPE '\'
其中,上面的语句返回任何包含借口的结果


有没有什么方法可以对这些字符使用转义,这样我就可以转义“['+']”字符,或者用另一种/更好的方法来处理这类事情?

根据文档:

public static bool Like (this Microsoft.EntityFrameworkCore.DbFunctions _, string matchExpression, string pattern, string escapeCharacter);
可以添加转义字符作为附加参数


就像JamieD77所说的那样,Contains应该在没有字符串操作的情况下也能工作。

[[]]
退出打开
[
,你不需要退出关闭
]
,例如,
'%primary[[]Account]'
找到任何包含“primary[Account]”的内容。我总是忘记..但是
t.name.Contains(param.Request.name)
not work?正如JamieD77所说,Contains在这种情况下也可以工作,不涉及字符串操作。我已经接受了一个与EF.Functions.Like特别相关的答案,并在下面提供了一个其他人在这里遇到问题的例子。谢谢。
param.Request.Name=param.Request.Name.Replace(“[”,“\\\[”)
param.Request.Name=param.Request.Name.Replace(“]”,“\\]”;
objects=objects.Where(t=>EF.Functions.Like(t.Name,“%”+param.Request.Name+“%”,“\\”);
似乎可以工作。谢谢!