簡體   English   中英

使用dapper進行動態參數化查詢

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM