当我检查 Linq 发出的 SQL 查询时,我注意到它在执行 LIKE 命令时放置了一个 ESCAPE N'~'。我该如何摆脱这个?看起来查询花费的时间是 SQL 中转义符的两倍。
这是 LINQ
var SearchPhrase = "xyz";
var result = (from i in db.myTable
where i.col1.contains(SearchPhrase)
select i).toList();
当我查看实际的 SQL 时,它看起来像这样:
SELECT
[Extent1].Col1
FROM myTable As [Extent1]
WHERE [Extent1].Col1 LIKE @p__linq__3 ESCAPE N'~'
显然,
var SearchPhrase = "xyz";
var result = (from I in db.myTabl
where i.col1.contains(SearchPhrase)
select I).toList();
将在基础查询中添加 ESCAPE N'~'。
但是,使用如下所示的常量过滤器,不会在基础查询中产生转义字符
var result = (from I in db.myTabl
where i.col1.contains("xyz")
select I).toList();
这意味着变量过滤器被转义,而常量则不然。
因此,在这种情况下,我们需要一个变量来用作常量过滤器。
使用以下内容时,不应添加任何转义字符:
var SearchPhrase = "xyz";
var result = (from I in db.myTabl
where SqlMethods.Like(i.col1, string.Format("%{0}%", SearchPhrase))
select I).toList();
但这仅适用于 LINQ to SQL。
另一种选择是将变量值嵌入为常量,这是使用以下内容完成的,如所以文章
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)