c# System.Linq.Dynamic:如何向SqlQuery传递object[]参数

本文关键字:传递 SqlQuery object 参数 Linq System Dynamic | 更新日期: 2023-09-27 18:09:07

为什么:

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及参数

c# System.Linq.Dynamic:如何向SqlQuery传递object[]参数

您需要将params关键字包含到"parameters"参数中:

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