Dapper Query 手札

the query sample with Dapper. 紀錄 Dapper Query 七種應用狀況。

紀錄 Dapper Query 七種應用狀況。

一、無參數 Dapper Query

using (SqlConnection conn = DBHelper.CONNSEC.Open())
{
    // 無參數 Dapper Query 
    var dataList = conn.Query<SecConnectionPool>("SELECT * FROM SecConnectionPool ");
}

二、固定參數 Dapper Query

using (SqlConnection conn = DBHelper.CONNSEC.Open())
{       
    string sql = "SELECT * FROM SecConnectionPool WHERE ConnectionID like @ConnectionID ";
    // Dapper Query 參數可以是 anonymous type
    var dataList = conn.Query<SecConnectionPool>(sql, new { ConnectionID = "CONN%" });
}

三、動態參數 Dapper Query

using (SqlConnection conn = DBHelper.CONNSEC.Open())
{
    DynamicParameters param = new DynamicParameters(); // Dapper 動態參數
    StringBuilder sql = new StringBuilder(); 
    sql.Append(@"SELECT * FROM SecConnectionPool WHERE 1=1 ");
    
    // 依條件動態加入查詢參數
    if (!String.IsNullOrWhiteSpace(myFiled))
    {
       sql.Append("AND MyFiled = @myFiled");
       param.Add("myFiled", myFiled);
    }
    
    // 依條件動態加入查詢參數 LIKE
    if (!String.IsNullOrWhiteSpace(connectionID ))
    {
       sql.Append("AND ConnectionID like @connectionID ");
       param.Add("connectionID ", $"%{connectionID }%");
    }
    
    // 依條件動態加入查詢參數 勾選與否 checked?:Y/N,
    if (args.isEnable == "Y")
      sql.Append("AND IsEnable = 'Y' ");
    else if(args.isEnable == "N")
      sql.Append("AND IsEnable != 'Y' ");
        
    // 依條件動態加入查詢參數 日期區間 bgn <= x < end
    if (args.dateBgn.HasValue)
    {
      // 若有起日 則 大於等於 起日
      sql.Append("AND UpdDtm >= @bgnDate ");
      param.Add("@bgnDate", args.dateBgn.Value);
    }
    if (args.dateEnd.HasValue) // 訖日
    {
      // 若有訖日 則 小於 訖日隔天
      sql.Append("AND UpdDtm < @endDate ");
      param.Add("@endDate", args.dateEnd.Value.AddDays(1));
    }
                
    // 依條件動態加入查詢參數 IN
    if (argList != null && argList.Count > 0)
    {
        // 動態生成查詢變數串列
        var nameList = Enumerable.Range(1, argList.Count).Select(i => $"@MyField{i}");
        // 組成 IN 查詢條件字句        
        sql.Append("AND MyField IN (" + String.Join(",", nameList) + ") ");           
        // 一一填入查詢變數串列
        Enumerable.Zip(nameList, argList).ToList().ForEach(c => {
            param.Add(c.First, c.Second);
        });
    }
       
    // Dapper Query
    var dataList = conn.Query<SecConnectionPool>(sql.ToString(), param)
                       .AsList();
}

四、從 SqlCommand 轉成 Dapper CommandDefinition 再執行

五、GetEx:取代 Dapper.Contrib 之 Get 指令無法多 P-Key 取值的狀況

circle-exclamation

GetEx 範例

六、LoadEx:載入多筆資料。與GetEx相比可以取回多筆資料。

LoadEx 範例:取得主檔下的多筆明細

七、QueryMultiple:多項目查詢,如:主檔明細檔一回合就查詢出來。

參考:Dapper - Result Multi-Resultarrow-up-right

Last updated