2016-03-22 12 views
1

diese einfache Abfrage Betrachten Sie die auf dem Keywords Feld Volltextsuche verwenden:eine Volltextsuche Parameterübergabe mit Dapper.net

DECLARE @searchTerm VARCHAR(500) = 'painted' 
SELECT * FROM StockCatalogueItems 
WHERE (CONTAINS(KeyWords, @searchTerm)) 

Das funktioniert wie erwartet, aber ich brauche das gleiche mit einem Dapper zu tun .net parametrisierte Abfrage. Wenn ich gespeicherte Prozeduren verwende, erstelle ich den Volltext-Parameter wie folgt: "\"painted*\""

Aber mit dem gleichen Ansatz funktioniert das nicht mit Dapper. Keine Ergebnisse werden zurückgegeben. Dies ist die Zeile in der Abfrage, wo ich die Parameter verwenden:

AND (CONTAINS(KeyWords, @search)) 

und es ist wie so an die Abfrage übergeben:

return _context.Database.Connection.Query<StockProfileMatrix>(basequery, new 
{ 
    search = searchTerm 
} 

Ich kann nur annehmen, dass adrett irgendwie die Zeichenfolge Hygienisierung, Entfernen Anführungszeichen vielleicht?

Irgendwelche Ideen?

+1

Dapper sanieren nicht * alles * - es verwendet Parameter. Alles, was in TSQL mit einer Variablen * funktioniert, sollte auch als Parameter funktionieren. Der einzige bemerkenswerte Unterschied ist, dass dapper standardmäßig Unicode ('nvarchar') verwendet. Anders gesagt, wenn 'searchTerm' (in C# -Termen) die Zeichenkette' 'painted'' wäre, wäre es * mit Ihrer TSQL ganz oben * identisch und sollte gut funktionieren. In TSQL-Bedingungen funktioniert Ihre oberste Abfrage mit 'DECLARE @searchTerm NVARCHAR (500) = N'painted'? Hinweis: Wenn der * Term *, hinter dem Sie her sind, 'painted *' ist, dann wird in C# Begriffen nur '' painted * '' '' '' '' –

+0

@marpsmith - Ich renne in die Hast du das Muster gefunden? Denn wenn ich 'where contains (@ name, 'campb')' it * schreibe gibt nichts zurück auf sql und dapper * was * konsistent * ist, aber wenn ich 'where contains (@name, '' campb '')' * auf sql gibt Zeilen zurück, aber nichts auf dapper * - irgendeine Eingabe? – Jaya

Antwort

1

Das funktioniert für mich. Doch der Tech-Stack auf arbeite ist .net core RTM und "Dapper": "1.50.0-rc3",

_dbConnection.QueryAsync<Guid>(@"select br.Id from Brand br where CONTAINS(br.Text,@Name)",new {Name = $"\"*{name}*\""}))