Arc*_*ian 6 sql linq entity-framework
当我检查linq吐出的sql查询时,我注意到它在执行LIKE命令时放置了一个ESCAPE N'〜'.我怎么摆脱这个?似乎查询需要两倍的时间,ESCAPE在sql中.
这是LINQ
var SearchPhrase = "xyz";
var result = (from I in db.myTabl
where i.col1.contains(SearchPhrase)
select I).toList();
Run Code Online (Sandbox Code Playgroud)
当我看到实际的sql
它看起来像这样:
SELECT
[Extent1].Col1
FROM myTable As [Extent1]
WHERE [Extent1].Col1 LIKE @p__linq__3 ESCAPE N'~'
Run Code Online (Sandbox Code Playgroud)
显然,
var SearchPhrase = "xyz";
var result = (from I in db.myTabl
where i.col1.contains(SearchPhrase)
select I).toList();
Run Code Online (Sandbox Code Playgroud)
将在底层查询中添加ESCAPE N'〜'.
但是,使用如下所示的常量过滤器不会在基础查询中生成转义字符
var result = (from I in db.myTabl
where i.col1.contains("xyz")
select I).toList();
Run Code Online (Sandbox Code Playgroud)
这意味着,变量过滤器是转义的,而常量则不是.
因此,在这种情况下,我们需要一个变量用作常量过滤器.
使用以下内容,不应添加任何转义字符:
var SearchPhrase = "xyz";
var result = (from I in db.myTabl
where SqlMethods.Like(i.col1, string.Format("%{0}%", SearchPhrase))
select I).toList();
Run Code Online (Sandbox Code Playgroud)
但这仅适用于LINQ to SQL.
另一种方法是将变量值嵌入为常量,这可以使用SO文章中的说明来完成
Linq to Sql 使用“`”作为进行类似比较时的默认转义字符。仅当您的字符串实际上包含 ~ 字符时才会导致问题。
使用SqlMethods.Like覆盖它。