【ADO.net | Entity SQL Language】Entity SQL Language資料查詢做交集、聯集與差集

【Entity SQL Language】Entity SQL Language資料查詢做交集、聯集與差集
在EF(entity framework)中提供了三種的資料查詢方式,有 Linq to Entities、Query Builder Mothed 以及小弟比較常用在動態資料查詢上的 Entity SQL Language
而會寫這篇文章其實是在今天寫系統的時候剛好遇到這個,剛好可以與大家分享
今天我碰到的問題是,A資料表的資料,不可以在B資料表中出現,或許對SQL熟的人會說可以利用子查詢來達到效果,但...過濾條件在兩個以上的子查詢,撰寫上不是這麼容易的...,所以小弟決定利用關聯的概念去解決這個問題!而我把相關的應用都打出來,希望可以跟大家互相交流 ^_^

在EF(entity framework)中提供了三種的資料查詢方式,有 Linq to Entities、Query Builder Mothed 以及小弟比較常用在動態資料查詢上的 Entity SQL Language

而會寫這篇文章其實是在今天寫系統的時候剛好遇到這個,剛好可以與大家分享

 

今天我碰到的問題是,A資料表的資料,不可以在B資料表中出現,或許對SQL熟的人會說可以利用子查詢來達到效果,但...過濾條件在兩個以上的子查詢,撰寫上不是這麼容易的...,所以小弟決定利用關聯的概念去解決這個問題!而我把相關的應用都打出來,希望可以跟大家互相交流 ^_^

 

差集:只取出A資料表不包含與B資料表內相同的資料。

expressionA EXCEPT expressionB
DataBaseEntities db = new DataBaseEntities();
SQL = "(SELECT Value a FROM TableA as a WHERE {條間篩選}) EXCEPT (SELECT Value b FROM TableB as b WHERE {條件篩選})";
List<TableA> user = te.CreateQuery<TableA>(SQL);
 
交集:從兩個資料表取出同時存在的記錄。
expressionA INTERSECT expressionB
DataBaseEntities db = new DataBaseEntities();
SQL = "(SELECT Value a FROM TableA as a WHERE {條間篩選}) INTERSECT (SELECT Value b FROM TableB as b WHERE {條件篩選})";
List<TableA> user = te.CreateQuery<TableA>(SQL);
 
聯集:將兩個資料表的記錄都全部結合成在一起,如果有重複記錄,只顯示其中一筆。
expressionA UNION expressionB
DataBaseEntities db = new DataBaseEntities();
SQL = "(SELECT Value a FROM TableA as a WHERE {條間篩選}) UNION (SELECT Value b FROM TableB as b WHERE {條件篩選})";
List<TableA> user = te.CreateQuery<TableA>(SQL);

 

饅頭小筆記:在下 EXCEPT、INTERSECT跟UNION的時候,前後的expression必須要用括號包起來,不然會一直錯誤...

 

參考資料:

http://msdn.microsoft.com/zh-tw/library/bb738532(v=vs.90).aspx

 


 

大家好我是饅頭,希望大家喜歡我的文章

如果有錯誤的地方請不吝指教 ^_^