C#System.Linq.Dynamic:如何将对象[]参数传递给SqlQuery

时间:2011-09-17 23:56:51

标签: c# dynamic-linq

为什么:

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 and parameters

1 个答案:

答案 0 :(得分:1)

您需要在{parameters>参数中包含params关键字:

IEnumerable<MyEntity> MyFunction(string sql, params object[] parameters)
{
    return Context.Database.SqlQuery<TEntity>(sql, parameters);   
}