LINQ基礎(chǔ)之Join和UNION子句
Join子句
一、簡(jiǎn)介
使用join子句可以將來自不同源序列并且在對(duì)象模型中沒有直接關(guān)系的元素相關(guān)聯(lián),唯一的要求是每個(gè)源中的元素需要共享某個(gè)可以進(jìn)行比較以判斷是否相等的值,join子句使用特殊的equals關(guān)鍵字比較指定的鍵是否相等。
二、案例
內(nèi)部連接
var innerJoinQuery = from category in categories join prod in products on category.ID equals prod.CategoryID select new { ProductName = prod.Name, Category = category.Name };
分組連接
var innerGroupJoinQuery = from category in categories join prod in products on category.ID equals prod.CategoryID into prodGroup select new { CategoryName = category.Name, Products = prodGroup };
左外部連接
var leftOuterJoinQuery = from category in categories join prod in products on category.ID equals prod.CategoryID into prodGroup from item in prodGroup.DefaultIfEmpty(new Product{Name = string.Empty, CategoryID = 0}) select new { CatName = category.Name, ProdName = item.Name };
分析:
在左外連接中,將返回左側(cè)源序列中的所有元素,即使它們?cè)谟覀?cè)序列中沒有匹配的元素也是如此。
若要在Linq中執(zhí)行左外連接,請(qǐng)將DefaultIfEmpty方法與分組連接結(jié)合起來,以指定要在某個(gè)元素不具有匹配元素時(shí)產(chǎn)生的默認(rèn)右側(cè)元素,可以使用null作為任何引用類型的默認(rèn)值。也可以指定用戶定義的默認(rèn)類型。
UNION子句
一、簡(jiǎn)介
Union返回并集,并集是指位于兩個(gè)集合中任一集合的唯一的元素(自動(dòng)去重復(fù)了)。在LINQ中UNION默認(rèn)是去重的,沒有UNION ALL 語句,不去重用CONCAT()。
二、案例
1.查詢語句寫法
Union會(huì)去除重復(fù)項(xiàng),相當(dāng)于SQL的Union
var q = (from c in db.Customers select c.Country ).Union(from e in db.Employees select e.Country );
相當(dāng)于
var q1 = from s in db.Student where s.ID < 3 select s; var q2 = from s in db.Student where s.ID < 5 select s; //去掉重復(fù)的 var q = q1.Union(q2); var r = q.ToList();//ToList之后,會(huì)把數(shù)據(jù)查出來在內(nèi)存中操作
如果不去重,用Concat()
//Concat不會(huì)去除重復(fù)項(xiàng)目,相當(dāng)于SQL的Union All; //不去掉重復(fù)的 相當(dāng)于union all, var q3 = q1.Concat(q2); var r3 = q3.ToList()
2.另一種寫法
var q = db.Customers.Union(db.Employees).select(d=>d.Country);
到此這篇關(guān)于LINQ使用Join和UNION子句的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
WinForm導(dǎo)出文件為Word、Excel、文本文件的方法
這篇文章主要介紹了WinForm導(dǎo)出文件為Word、Excel、文本文件的方法,本文直接給出實(shí)現(xiàn)代碼,代碼中包含相應(yīng)注釋,需要的朋友可以參考下2015-03-03Unity讀取Excel文件轉(zhuǎn)換XML格式文件
這篇文章主要為大家詳細(xì)介紹了Unity讀取Excel文件轉(zhuǎn)換XML格式文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06C#實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘和日歷
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘和日歷的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06C#修改IIS站點(diǎn)framework版本號(hào)的方法
這篇文章主要介紹了C#修改IIS站點(diǎn)framework版本號(hào)的方法,涉及C#調(diào)用使用ASP.NET IIS注冊(cè)工具Aspnet_regiis.exe進(jìn)行IIS站點(diǎn)framework版本號(hào)修改的方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10C#使用EF連接PGSql數(shù)據(jù)庫的完整步驟
這篇文章主要給大家介紹了關(guān)于C#使用EF連接PGSql數(shù)據(jù)庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01Unity3D實(shí)現(xiàn)鼠標(biāo)控制旋轉(zhuǎn)轉(zhuǎn)盤
這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)鼠標(biāo)控制旋轉(zhuǎn)轉(zhuǎn)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02C# 實(shí)現(xiàn)QQ式截圖功能實(shí)例代碼
本篇文章主要介紹了C# 實(shí)現(xiàn)QQ式截圖功能實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02