LINQ在查询中插入'ESCAPE N'〜'

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)

Con*_*rla 5

显然,

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文章中的说明来完成


ala*_*anh 0

Linq to Sql 使用“`”作为进行类似比较时的默认转义字符。仅当您的字符串实际上包含 ~ 字符时才会导致问题。

使用SqlMethods.Like覆盖它。

  • SqlMethods.Like 仅适用于 Linq To Sql,不适用于 Linq To Entities (3认同)