在程序上為Dapper創建一個動態對象

ado.net c# dapper sql-server tsql

我見過很多關於創建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);

一般承認的答案

只是回答我自己的問題,因為我們今天早些時候找到了正確的解決方案。

簡而言之,我們發現了IDynamicParameters這個類只是解決了一切,充當了一個Dictionary

var inTerms = new Dapper.DynamicParameters();

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

大家都很開心!



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow