[英]Dynamic Parameterized query with dapper
我想用動態參數列表編寫一個查詢(取決於是否設置參數)。 我想使用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
對象,其功能更像是一個字典 - 但你不需要這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.