2016-03-03 74 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