C # System.Linq.Dynamic: Как передать параметры объекта [] в SqlQuery - PullRequest
1 голос
/ 18 сентября 2011

Почему:

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

Т.е. моя проблема в том, что я не могу понять, как передать массив параметров.

EDIT:

Принятый ответ отвечает на вопрос, но есть еще одна проблема: вам нужно параметризовать массив, т.е. вместо просто значений, передать их как массив именованных SqlParameters. См:

SQlQuery и параметры

1 Ответ

1 голос
/ 18 сентября 2011

Вам необходимо включить ключевое слово params в параметр «параметры»:

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