【问题标题】:Linq to SQL Like search with a "#" signLinq to SQL Like 搜索带“#”号
【发布时间】:2016-03-03 18:48:46
【问题描述】:

有一个 linq to sql "Like" 查询 (VB.Net) 将其用作比较值:

%HIPP,%JOHN%A%LLLP%#1%

这里是查询:

docs.Where(Function(d) d.Parties.Where(Function(p) p.PartyName Like partyName And p.PartyName "" And p.PartyType = 2).Any)

partyName = %HIPP,%JOHN%A%LLLP%#1%

但是,在 SQL Server 中分析查询时,“#”会显示为 [0-9],因此 sql 语句会显示“... where field like %HIPP,%JOHN%A%LLLP%[0- 9]1% 所以它显然没有返回我正在寻找的值。

谁能解释一下这里发生了什么?

谢谢!

【问题讨论】:

  • 我将 linq 查询添加到我原来的问题中。
  • 您可以使用 linqpad 复制它,只需在 linq Like 查询中使用“#”,您将看到它生成的 sql 将“#”符号替换为文本 [0-9] .

标签: sql-server vb.net linq


【解决方案1】:

根据MSDN

要匹配左括号 ([)、问号 (?)、数字符号 (#) 和星号 (*) 的特殊字符,请将它们括在括号中。

所以你的搜索词应该是

HIPP,*JOHN*A*LLLP*[#]1*

请注意,您还应该使用* 而不是%

还请注意,您可以使用...

p.PartyName.Contains(partyName)

...转换为LIKE。它将partyName 括在% 字符中并转义通配符:Contains("a%") 被翻译为LIKE '%a~%%' ESCAPE '~'

或者……

SqlMethods.Like(p.PartyName, partyName) 

...按原样使用partyName,并像往常一样处理LIKE (SQL) 的通配符。

【讨论】:

  • "要匹配左括号 ([)、问号 (?)、数字符号 (#) 和星号 () 的特殊字符,请将它们括在括号中。这正是我要找的,谢谢!我使用“”作为通配符,我粘贴的是 sql profiler 中的结果。我将尝试将“#”括在括号中,看看会发生什么。执行“包含”搜索不会替换“#”,但它也不适用于我要比较的字符串。试一试我会发表评论,谢谢!
  • 像魅力一样工作,谢谢。我知道它必须是这样的,但无法通过谷歌找到任何东西,感谢您找到 MSDN 文档!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
相关资源
最近更新 更多