2016-03-28 9 views
0

私はのような何かを探しています:コマンドは罰金、例外なく通過しますが、私は受け取りませんCONTAINS句でSQLパラメータを使用するにはどうすればよいですか?

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")); 

:ように私はEFののSQLQuery()メソッドを介してクエリを発行

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

任意の結果。パラメータの代わりに手動で文字列を使用すると、期待通りの結果が得られます。私はいろいろな形や引用符の組み合わせを試しましたが、無駄です。

CONTAINS式内でSQLパラメータを使用できますか?

ありがとうございます!

答えて

0

CONTAINS関数では1つの文字列が使用されるため、パラメータを使用できるとは限りません。しかし、完全な文字列を構築し、それを単一のパラメータとして渡すことができます。あなたが構築した文字列がパラメータとして渡されている限り、私は可能なSQLインジェクションの問題を避けると信じています。

0

お試しください。

次のクエリを使用してlist.filterを取得したら、 まず、すべてのパラメータを文字列配列に配置します。

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

注:ResultSetがhuge.itは、フロントエンドにすべての結果を返し、あなたはフィルタリングする他の条件を持っているほとんどの場合filter.in行うにはお勧めできませんであれば。

関連する問題