Pages - Menu

2017年9月27日 星期三

Dapper 使用 in 帶入參數

今天碰到的問題,

要在不同的server取資料出來做比對。

來達成我未來的懶人生活。

才發現不知道怎麼下in的條件丟去dapper裡面。

正常的寫法為

using (var cn = new SqlConnection(mst_fatekConnStr))
{
     string strSql = string.Format(@"select a,b,c from item where add_dt >=@add_dt");
     var list = cn.Query<ItemModels>(strSql,new { add_dt = add_dt});

}

在來如果要把上面的欄位 a 拉出來當作子查詢的參數,想要的sql是這樣

select * from item where a in ( select a from item where add_dt >= @add_dt)

現在要用dapper解決 in帶參數的問題

最簡單的應該是 用foreach 把每一個欄位的值拉出來,前後加上 單引號 以及 逗點 串成字串,

另外一種

var items_no = list.Select(p=>p.a).ToList<string>();
string strSql2 = string.Format(@"select a,b,c from item where add_dt >=@add_dt and a not in @items_no");
var list2 = cn2.Query<ItemModels>(strSql2, new { add_dt = add_dt,items_no = items_no });


雖然跟上面用foreach的方式差不多,但這個只要一行就解決,

不用在用foreach串字串了。

參考:stackoverflow

沒有留言:

張貼留言