LINQ 實作T-SQL IN/NOT IN

  • 199
  • 0
  • 2017-08-07

在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();

以上