Dapper Query 手札
the query sample with Dapper. 紀錄 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 取值的狀況
GetEx 範例
六、LoadEx:載入多筆資料。與GetEx相比可以取回多筆資料。
LoadEx 範例:取得主檔下的多筆明細
七、QueryMultiple:多項目查詢,如:主檔明細檔一回合就查詢出來。
Last updated