小编Ken*_*nny的帖子

在Dapper中,此上下文中不允许使用可枚举的参数序列(数组,列表等)

我有以下代码:

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)

输出错误:在此上下文中不允许使用可枚举的参数序列(数组,列表等).

它怎么样?有同等的解决方案吗?

c# dapper

8
推荐指数
2
解决办法
5970
查看次数

如何在DynamicMethod Emit中表示typeof(Int32&)类型

我有以下代码:

    delegate void RefAction(ref Int32 i);// use ref keyword
    static RefAction CreateRefGenerator(){
        // How to represent typeof(Int32&)type in here??
        Type[] types ={ typeof(Int32)};
        var dm = new DynamicMethod("RefAction"+Guid.NewGuid().ToString(), null, types, true);
        var il = dm.GetILGenerator();
        il.Emit(OpCodes.Nop);
        il.Emit(OpCodes.Ldarg_1);
        il.Emit(OpCodes.Ldc_I4_S,10);
        il.Emit(OpCodes.Stind_I4);
        il.Emit(OpCodes.Ret);

        return (RefAction)dm.CreateDelegate(typeof(RefAction));
    }
Run Code Online (Sandbox Code Playgroud)

运行后,得到以下错误:

因为其签名或安全透明性与委托类型的签名或安全透明性不兼容.

以下正常工作:

  static RefAction CreateRefGenerator(){
        Type[] types = { typeof(Int32).MakeByRefType() };
        ...
  }
Run Code Online (Sandbox Code Playgroud)

c# cil dynamicmethod emit

1
推荐指数
1
解决办法
189
查看次数

标签 统计

c# ×2

cil ×1

dapper ×1

dynamicmethod ×1

emit ×1