我想用动态参数列表编写一个查询(取决于是否设置参数).
我想使用dapper在oracle数据库上执行查询.
示例代码:
var sqlParams = new List<object>();
var sqlBuilder = new StringBuilder();
sqlBuilder.Append("SELECT * FROM EXAMPLE WHERE 1 = 1 ");
if (!string.IsNullOrEmpty(aParam))
{
sqlBuilder.Append(" AND A LIKE ?");
}
if (!string.IsNullOrEmpty(bParam))
{
sqlBuilder.Append(" AND B LIKE ? ");
}
var sql = sqlBuilder.ToString();
return this.Connection.Query<Equipment>(
sql,
new { aParam, bParam } // ??
).ToList();
最佳答案 Dapper只适用于命名参数.我似乎记得在oracle中它们是以冒号为前缀的,所以:
if (!string.IsNullOrEmpty(aParam))
{
sqlBuilder.Append(" AND A LIKE :aParam");
}
if (!string.IsNullOrEmpty(bParam))
{
sqlBuilder.Append(" AND B LIKE :bParam");
}
现在你现有的代码在这里:
return this.Connection.Query<Equipment>(
sql,
new { aParam, bParam }
).ToList();
应该管用. Dapper使用匿名类型成员的名称作为参数名称.它还包括一些非常基本的代码来检查sql中是否存在任何给定成员,因此如果你的sql只提到:bParam,它实际上不会将aParam值作为参数添加.
在更复杂的场景中,还有一个可以使用的DynamicParameters对象,其功能更像是一个字典 – 但你不需要这里.