Dapper 建筑参数表
Dapper building parameter list
我有这个class:
public class Parameters
{
public string UserId {get;set;}
public string OrgId {get;set;}
public string Roles {get;set;}
}
它从 JSON 字符串反序列化。所以有些属性是null
.
构建要传递给 Dapper 的参数列表的最佳方法是什么。
目前,我在 SQL 语句末尾构建要标记的参数字符串的逻辑是这样的:
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);
会引发错误
Extension methods cannot be dynamically dispatched
您无需执行任何操作:只需将您的对象作为参数传递即可。 Dapper 只会传入它可以在查询中识别的 properties/parameters ......即使它全部传入:它理解 null.
对象没问题。
...QueryAsync(sql, query.Parameters)...
我有这个class:
public class Parameters
{
public string UserId {get;set;}
public string OrgId {get;set;}
public string Roles {get;set;}
}
它从 JSON 字符串反序列化。所以有些属性是null
.
构建要传递给 Dapper 的参数列表的最佳方法是什么。
目前,我在 SQL 语句末尾构建要标记的参数字符串的逻辑是这样的:
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);
会引发错误
Extension methods cannot be dynamically dispatched
您无需执行任何操作:只需将您的对象作为参数传递即可。 Dapper 只会传入它可以在查询中识别的 properties/parameters ......即使它全部传入:它理解 null.
对象没问题。
...QueryAsync(sql, query.Parameters)...