2017-04-25 9 views
3

にこのコンテキストで許可されていない私は、次のコードを有する:列挙シーケンスは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] + "[email protected]" + item.Split('=')[0]; 
      list.Add(new SqlParameter("@" + item.Split('=')[0], item.Split('=')[1])); 
     } 
     sql += condition; 
     return list.ToArray() ; 
    } 

出力誤差:パラメータ(配列、リストの列挙シーケンスを、この文脈では許可されない。

どのようにすることができますか?同等のソリューションはありますか?

+1

Dapperのプロパティと値のセットではなく、SQLパラメータのリストで何かを望んでいるためだこと。私は、キーがパラメータ名(@を除く)で、値がパラメータに設定する値である代わりに 'Dictionary 'を作成できると思います。アイデアは、Dapperがあなたのためにプロパティの作成を行うということです。 – juharr

+0

おそらく、あなたはこのstackoverflowスレッドで何かを見つけるでしょう。 [http://stackoverflow.com/questions/33681176/dapper-multi-insert-returning-inserted-objects] –

答えて

1

ではなく、SqlParameterアレイでDapper.DynamicParametersを使用してみてください:

var parameters = new DynamicParameters(); parameters.Add("@ParameterName", parameterValue);