[英]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.