4

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

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

基本的に、使用しており、句が引数の特定の配列から作成さDapperれるクエリを動的に作成する必要があります。クエリを一般化WHEREしていません。これは可変数の引数を受け取る単一のメソッドであり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);
4

1 に答える 1

6

今日の初めに適切な解決策を見つけたので、私自身の質問に答えるためだけに。

簡単に言えば、IDynamicParametersAndこのクラスは単純にすべてを解決し、として機能することがわかりましたDictionary

var inTerms = new Dapper.DynamicParameters();

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

みんな幸せ!

于 2013-03-19T03:51:10.500 に答える