在LINQ 實作 T-SQL IN 的查詢效果 NOT IN
在T-SQL 裡面有IN可以使用,滿方便的,也很實用,
今天在寫LINQ的時候需要用的這個效果,查了一下網路之後把IN的效果實做出來
先撈出全部的資料
var query = from pro in Products
select new {
productID=pro.ProductId,
productName = pro.ProductName
};
query.Dump();
確定執行是有資料的:
我想要取出ProductID 是 1~6的資料
//用List將所有條件包再一起
List<int> _condition = new List<int>();
_condition.Add(1);
_condition.Add(2);
_condition.Add(3);
_condition.Add(4);
_condition.Add(5);
_condition.Add(6);
var query = from pro in Products
where _condition.Contains(pro.ProductId) //這邊用Contains
select new {
productID=pro.ProductId,
productName = pro.ProductName
};
執行結果:
檢查一下執行的SQL語法:
結果正確,以上。
2017/05/26
如果要NOT IN 只要加上!()即可
如以下語法,排除掉CURRENT_STATE 是"A","E","F","G"的資料
var query_2 = (from _apply in AP_APPLies.AsQueryable()
where !(new String[] { "A","E", "F", "G" }).Contains(_apply.CURRENT_STATE)
select new{
APID = _apply.APID,
CURRENT_STATE = _apply.CURRENT_STATE
}).OrderBy(p=>p.CURRENT_STATE);
query_2.Dump();
執行結果:
這樣就排除掉A的資料了,以上。
2017/08/07 16:40 補充
如果想要用Lamda運算式來實作IN/NOT IN
//撈出全部的資料
var query = (from p in AP_APPLies select new {
APPLY_ID = p.AP_APPLY_ID,
CURRENT_STATE = p.CURRENT_STATE
});
// IN
String[] cond_1 = new String[] { "A", "G" };
var query_1 = query.Where(x=>cond_1.Contains(x.CURRENT_STATE));
query_1.Dump();
//NOT IN
var query_2 = query.Where(x=>!cond_1.Contains(x.CURRENT_STATE));
query_2.Dump();
以上