2016-03-03 2 views
0

Avoir un LINQ to SQL "comme" requête (VB.Net) qui utilise cela comme une valeur de comparaison:LINQ to SQL comme la recherche avec un "#" signe

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

Voici la requête:

docs.Where (Fonction (d) d.Parties.Where (Fonction (p) p.PartyName Comme partyName Et p.PartyName <> "" Et p .PartyType = 2) .Any)

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

Cependant lors du profilage de la requête dans SQL Server, le "#" apparaît comme [0-9], donc l'instruction sql indique "... où champ comme% HIPP,% JOHN% A% LLLP% [0-9 ] 1% donc il est évident qu'il ne retourne pas les valeurs que je cherche.

Quelqu'un peut-il nous éclairer sur ce qui se passe ici?

Merci!

+0

J'ai ajouté la requête linq à ma question initiale. – DonnieDarko

+0

Vous pouvez utiliser linqpad pour dupliquer ceci, utilisez simplement un "#" dans une requête linq Like et vous verrez que le sql qu'il génère remplace le signe "#" par le texte [0-9]. – DonnieDarko

Répondre

1

Comme par MSDN: (?)

Pour correspondre aux caractères spéciaux gauche support ([), point d'interrogation, signe dièse (#), et l'astérisque (*), enferment les entre parenthèses.

Ainsi, votre terme de recherche devrait être

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

Notez que vous devez utiliser * au lieu de %.

Notez également que vous pouvez utiliser ...

p.PartyName.Contains(partyName) 

... ce qui se traduit par LIKE. Il contient partyName en % caractères et échappe caractères génériques: Contains("a%") est traduit par LIKE '%a~%%' ESCAPE '~'.

Ou ...

SqlMethods.Like(p.PartyName, partyName) 

... qui utilise partyName en l'état, et gère des caractères génériques, comme d'habitude pour LIKE (SQL).

+0

"Pour faire correspondre les caractères spéciaux de gauche ([), le point d'interrogation (?), Le signe numérique (#) et l'astérisque (*), placez-les entre crochets." C'est exactement ce que je cherchais, merci! J'utilise "*" comme caractère générique, ce que j'ai collé était le résultat dans le profileur sql. Je vais essayer d'inclure le "#" entre parenthèses et voir ce qui se passe. Faire une recherche "Contient" ne remplace pas le "#", mais cela ne fonctionne pas non plus avec la chaîne que j'essaie de comparer. Je posterai un commentaire une fois que je l'aurai essayé, merci! – DonnieDarko

+0

Fonctionne comme un charme, merci. Je savais que ça devait être quelque chose comme ça mais je n'ai rien trouvé grâce à google, merci d'avoir trouvé cette documentation MSDN! – DonnieDarko