【发布时间】:2018-05-04 14:50:16
【问题描述】:
所以我正在对一个表实现一个搜索功能,该表的 varchar 字段包含通常带有简单字符串的文本,但其中一些包含“[文本]”,包括括号。
对于过滤功能,我正在使用实体框架并尝试使用 EF.Functions.Like 之类的:
objects = objects.Where(t => EF.Functions.Like(t.name, "%" + param.Request.Name + "%"));
问题是当 object.name 包含这些括号时,因为它触发了 SQL Charlist 通配符,所以上面返回 0 结果;我找不到任何关于如何将它与 SQL ESCAPE 关键字一起使用的信息,如下所示:
...WHERE NAME LIKE '%PRETEXT_\[TEXT\]%' ESCAPE '\'
上面的语句返回任何包含 PRETEXT_[TEXT] 的结果
有什么办法可以对这些使用 ESCAPE,这样我就可以转义 '[' + ']' 字符,或者用另一种/更好的方式来处理这类事情?
【问题讨论】:
-
用
[[]转义打开[并且您不需要转义关闭],例如'%Tariff [[]Account]%'找到包含“关税 [帐户]”的任何内容。 -
我总是忘记.. 但是
t.name.Contains(param.Request.Name)不起作用吗? -
正如 JamieD77 所说,Contains 也可以在这种情况下工作,并且不涉及字符串操作。我已经接受了一个专门与 EF.Functions.Like 相关的答案,并在下面提供了一个示例,如果其他人在这里绊倒的话。谢谢。
标签: c# sql .net sql-server entity-framework