今天碰到的問題,
要在不同的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串字串了。
0 意見:
張貼留言