なぜ:
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 の配列として渡す必要があります。見る: