我看过很多关于创建 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);
大家都很开心!
关于c# - 程序化地为 Dapper 创建一个动态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15483184/