[英]Dapper building parameter list
我有这门课:
public class Parameters
{
public string UserId {get;set;}
public string OrgId {get;set;}
public string Roles {get;set;}
}
它从JSON字符串反序列化。 所以一些属性为null
。
建立params列表以传递给Dapper的最佳方法是什么?
目前,我在SQL语句末尾构建params字符串的逻辑如下所示:
var parameters = string.Empty;
var parametersObj = new { };
if (query.Parameters != null)
{
if (!string.IsNullOrWhiteSpace(query.Parameters.UserId))
{
parameters = string.Format("{0} UserId = @UserId", parameters);
// parametersObj.UserId =
}
if (!string.IsNullOrWhiteSpace(query.Parameters.OrganisationIdentifier))
{
parameters = string.Format("{0}, OrganisationIdentifier = @OrganisationIdentifier", parameters);
}
if (!string.IsNullOrWhiteSpace(query.Parameters.Roles))
{
parameters = string.Format("{0}, Roles = @Roles", parameters);
}
}
var sqlString = string.Format("exec {0} {1}", query.DbObjectName, parameters);
conn.QueryAsync<dynamic>(sqlString, )
正如您在parametersObj
看到的那样,我采用了动态构建对象的JavaScript
方式。 如果我用dynamic
而不是对象做到这一点 - 它仍然可以工作吗?
例:
var parameters = string.Empty;
dynamic parametersObj = new { };
if (query.Parameters != null)
{
if (!string.IsNullOrWhiteSpace(query.Parameters.UserId))
{
parameters = string.Format("{0} UserId = @UserId", parameters);
parametersObj.UserId = query.Parameters.UserId;
}
if (!string.IsNullOrWhiteSpace(query.Parameters.OrganisationIdentifier))
{
parameters = string.Format("{0} OrganisationIdentifier = @OrganisationIdentifier ", parameters);
parametersObj.OrganisationIdentifier= query.Parameters.OrganisationIdentifier;
}
if (!string.IsNullOrWhiteSpace(query.Parameters.Roles))
{
parameters = string.Format("{0} Roles = @Roles", parameters);
parametersObj.Roles= query.Parameters.Roles;
}
}
var sqlString = string.Format("exec {0} {1}", query.DbObjectName, parameters);
conn.QueryAsync<dynamic>(sqlString, parametersObj);
我认为第二个例子将在您改变时起作用
dynamic parametersObj = new {};
至
dynamic parametersObj = new ExpandoObject();
和查询
conn.QueryAsync(sqlString, new
{
UserId = parametersObj.UserId,
...
};
注意:填写动态对象就好
conn.QueryAsync(sqlString, parametersObj);
会引起错误
无法动态分派扩展方法
您无需执行任何操作:只需将对象作为参数传递即可。 Dapper只传递它可以在查询中识别的属性/参数......即使它全部传递它们:它理解为null。
对象很好。
...QueryAsync(sql, query.Parameters)...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.