Dapperの動的オブジェクトを手続き的に作成する

ado.net c# dapper sql-server tsql

質問

私はExpandoObjectオブジェクトなどの作成について多くの記事を見てきましたが、私の場合は動作しません。私は次のようなオブジェクトを作成する必要があります

var someObj = new {
    term1 = "someValue",
    term2 = "other",
    ...
};

基本的には、 Dapperを使用しており、 WHERE句が指定された引数の配列から作成されるクエリを動的に作成する必要があります。私たちはクエリを一般化していません !これは、可変数の引数を受け取る単一のメソッドであり、1つの列のOR値をチェックする必要があります。

現在のところ、実行可能な唯一の解決策は、 System.Data.SqlClient.SqlConnectionを元に戻して直接使用することです。これを行う方法はありますか?

更新:

これはおそらく動作するはずですが、そうではありません:

string inWhere = null;
dynamic inTerms = new ExpandoObject();
IDictionary<string, object> inTermsDict = inTerms;

if (!(string.IsNullOrEmpty(filter.Term) || string.IsNullOrWhiteSpace(filter.Term))) {
    inWhere = "(" + string.Join(" OR ", filter.Terms.Select((t, i) => "{0} LIKE @p" + i)) + ")";
    int termIndex = 0;
    foreach (string term in filter.Terms) {
        inTermsDict.Add("p" + (termIndex++), term);
    }
}

// ...

var rows = db.Query("SELECT * FROM {table} WHERE {baseCondition}" +
     (string.IsNullOrEmpty(inWhere) ? "" : string.Format(" AND " + inWhere, "columnName")),
     inTerms as object);

受け入れられた回答

今日私たちが適切な解決策を見つけたので、自分の疑問に答えるだけです。

簡単に言えば、私たちはIDynamicParametersを見つけました。そして、このクラスはすべてを単に解決し、 Dictionaryとして機能します。

var inTerms = new Dapper.DynamicParameters();

inTerms.Add("@p" + (termIndex++), somveValue);

誰もが幸せです!



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ