我有以下代码:
static void Main(string[] args){
string sql= "SELECT * FROM Posts WHERE 1=1 ";
SqlParameter[] @params= SetDynamicParameter(ref sql, "Param=Value", "Param2=Value2", "ParamN=ValueN");
IDbConnection connection = new SqlConnection(connectionString);
IEnumerable<Posts> en = connection.Query<Posts>(sql,param:@params);
Console.ReadKey(true);
}
static SqlParameter[] SetDynamicParameter(ref string sql,params string[] sarr) {
string condition = string.Empty;
List<SqlParameter> list = new List<SqlParameter>();
foreach (var item in sarr)
{
condition += " AND "+item.Split('=')[0] + "=@" + item.Split('=')[0];
list.Add(new SqlParameter("@" + item.Split('=')[0], item.Split('=')[1]));
}
sql += condition;
return list.ToArray() ;
}
Run Code Online (Sandbox Code Playgroud)
输出错误:在此上下文中不允许使用可枚举的参数序列(数组,列表等).
它怎么样?有同等的解决方案吗?
小智 6
我知道这对你来说有点晚了,但也许它可以帮助其他人:)
你可以这样做:
public class MySqlDataAccess
{
string _connectionString = "{your connection string}";
public async Task<IEnumerable<CustomerDto>> GetListAsync(IList<Guid> customers)
{
const string query = @"
SELECT TOP 100 Id,
Name
FROM Customers
WHERE Id IN @CustomerIdList
";
using (var c = new SqlConnection(_connectionString))
{
return await c.QueryAsync<CustomerDto>(query, new { CustomerIdList = customers.ToArray() });
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以WHERE Id IN @CustomerIdList像这样从数组中传递匿名类型:new { CustomerIdList = customers.ToArray() }而不是直接传递数组。
希望能帮助到你!