1

なぜ:

IEnumerable<MyEntity> MyFunction(string sql, object [] params)
{
    // EG:
    // "SELECT * FROM MyTable WHERE MyField0 = @0 AND MyField1 = @1"
    // params = { 1, "UK" }

    return Context.Database.SqlQuery<TEntity>(sql, params);
}

...次のエラーが表示されますか?:

Must declare the scalar varliable "@0"

私はそれがうまくいくことを知っています:

var query = Context.Database.SqlQuery<TEntity>(
   "SELECT * FROM MyTable WHERE MyField0 = @0 AND MyField1 = @1", 1, "UK"
);

...しかし、コードを抽象化して、たとえば次のように呼び出したい:

var x = MyFunction(
       "SELECT * FROM MyTable WHERE MyField0 = @0 AND MyField1 = @1", 1, "UK"
    );

つまり、私の問題は、パラメーターの配列を渡す方法がわからないことです。

編集:

受け入れられた回答は質問に答えますが、別の問題があります。配列をパラメーター化する必要があります。つまり、値だけでなく、名前付きの SqlParameters の配列として渡す必要があります。見る:

SqlQuery とパラメーター

4

1 に答える 1

1

params「parameters」パラメーターにキーワードを含める必要があります。

IEnumerable<MyEntity> MyFunction(string sql, params object[] parameters)
{
    return Context.Database.SqlQuery<TEntity>(sql, parameters);   
}
于 2011-09-18T00:06:17.920 に答える