2016-03-28 10 views
0

Ich sah aus wie etwas zu tun:Wie kann ich SQL-Parameter in einer CONTAINS-Klausel verwenden?

select * from MyValues 
where CONTAINS(MyValues.Value, ' @p0 OR @p1 OR @p2 or @p3 ') 

ich die Abfrage durch EF sqlquery Ausgabe() -Methode wie:

query = context.Database.SqlQuery<MyResult>(@"select * from MyValues 
    where CONTAINS(MyValues.Value, '@p0 OR @p1 OR @p2 OR @p3')", 
    new SqlParameter("@p0", "Cat"), 
    new SqlParameter("@p1", "Green"), 
    new SqlParameter("@p2", "Red"), 
    new SqlParameter("@p3", "Dog")); 

Der Befehl keine Ausnahmen geht durch feine, aber ich weiß nicht erhalten irgendwelche Ergebnisse. Wenn ich manuell die Zeichenfolgen anstelle der Parameter verwende, bekomme ich die erwarteten Ergebnisse. Ich habe verschiedene Formen und Kombinationen von Anführungszeichen ausprobiert, aber ohne Erfolg.

Sind SQL-Parameter innerhalb eines CONTAINS-Ausdrucks zulässig?

Danke!

Antwort

0

Da die CONTAINS Funktion eine einzelne Zeichenfolge verwendet, glaube ich nicht, dass Sie Parameter verwenden können, wie Sie sie haben. Sie können versuchen, den vollständigen String aufzubauen und ihn als einzelnen Parameter zu übergeben. Solange die von Ihnen erstellte Zeichenfolge als Parameter übergeben wird, werden Sie Probleme mit der SQL-Injektion vermeiden.

0

Möglicherweise können Sie dies versuchen.

query = context.Database.SqlQuery<MyResult>(@"select * from MyValues) 

Sobald Sie Ihre list.filter es unter Verwendung von Abfrage. Zuerst legen Sie alle Ihre Parameter in einem String-Array.

string[] paramValues= [p1,p2,p3,p4] 
var results=query.where(r=> paramValues.Contains(r.Value)); 

Hinweis: Wenn Ihr Suchresultates ist huge.it ist keine gute Idee, alle Ergebnisse vorderen Ende zurückzukehren und tun filter.in den meisten Fällen Sie andere Bedingungen zu filtern.