2016-03-03 42 views
0

有一个LINQ to SQL的 “赞” 查询(VB.Net),这是以此作为比较值:LINQ to SQL的搜索一样以 “#” 号

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

下面是查询:

docs.Where(功能(d)d.Parties.Where(功能(p)p.PartyName喜欢partyName而p.PartyName <> “” 和p .PartyType = 2).Any)

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

但是,当分析SQL Server中的查询时,“#”会出现[0-9],所以sql语句显示“...其中字段如%HIPP,%JOHN%A%LLLP%[0-9 ] 1%,所以显然不会返回我正在查找的值。

任何人都可以点亮这里发生的一切吗?

谢谢!

+0

我添加了linq查询到我原来的问题。 – DonnieDarko

+0

你可以使用linqpad来复制它,只需在linq中使用“#”就像查询一样,你会看到它生成的sql用文本[0-9]替换了“#”符号。 – DonnieDarko

回答

1

MSDN:(?)

为了匹配左括号特殊字符([),问号,数字符号(#)和星号(*),请将其括号内。

所以,你的搜索词应该是

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

请注意,您也应该在%代替使用*

另外请注意,您可以使用...

​​

...翻译为LIKE。它包含partyName in %个字符并且逃脱通配符:Contains("a%")被翻译为LIKE '%a~%%' ESCAPE '~'

或者......

SqlMethods.Like(p.PartyName, partyName) 

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

+0

“要匹配特殊字符左括号([),问号(?),数字符号(#)和星号(*),请将它们括在括号中。” 这就是我一直在寻找的,谢谢! 我使用“*”作为通配符,我粘贴的是sql分析器中的结果。我会尝试在方括号中加上“#”,看看会发生什么。做一个“包含”搜索不会取代“#”,但它也不适用于我想比较的字符串。 一旦我给它一个镜头,我会发表评论,谢谢! – DonnieDarko

+0

工程就像一个魅力,谢谢。我知道它必须是这样的,但通过谷歌找不到任何东西,感谢您找到MSDN文档! – DonnieDarko