SlideShare une entreprise Scribd logo
1  sur  18
Linq初階
大綱
 Iterator/IEnumerable/IEnumerator
 yield關鍵字
 Enumerable/IEnumerable<T>
 委派型別
 延遲執行
ForEach處理
IEnumerable/IEnumerable<T>
Foreach、In
IEnumerable
IEnumerator
IEnumerable<T>
IEnumerator<T>
針對實做
IEnumerable介面
的物件,進行逐一巡覽
針對實做
IEnumerable<T>介面
的物件,進行逐一巡覽
呼叫GetEnumerator()
取得IEnumerator
呼叫GetEnumerator()
取得IEnumerator<T>
透過Current屬性取得現在的項目
型別為object。
透過MoveNext方法,推至下一個
透過Current屬性取得現在的項目
型別為T。
透過MoveNext方法,推至下一個
ForEach 呼叫集合的
GetEnumerator()
取得
IEnumerator<T>
並放置到變數V中
存取變數V的
Current屬性
取得當前項目
處理迴圈內的
流程
呼叫變數V的
MoveNext()
True/
False
Fin
•IEnumerable隱藏
了很多處理上的細
節。
•要想被ForEach能
夠存取的集合務必
要實做
IEnumerable介面。
為什麼要特別提到ForEach?
 因為Linq在編譯時會轉換成ForEach相
關的IL Code….
yield
 使用yield會傳回每一個項目一次一個。
(摘錄自MSDN…誰看得懂這句話?)
一碼勝過千言萬語
yield關鍵字使用限制
 yield只能用在下列兩個地方:
◦ For/ForEach迴圈
◦ 類別屬性的get存取子
yield在get存取上的應用
yield的多樣控制
 yield除了可以使用在return上之外,亦可
以應用在break上。
?
yield實戰應用的情境
 yield的本質就是當For/ForEach迴圈欲
取得當前項目的時候會等待yield準備好
本次要回傳的項目。
 主要應用在需要I/O等待的情境。
Enumerable
 這是一個靜態類別,主要目的如下:
◦ 針對IEnumerable<T>進行擴充
◦ 針對IEnumerable提供
Cast<T>/OfType<T>這兩個方法,供其轉型
成IEnumerable<T>。
 提供Repeat<T>方法: 產生重覆的T序
列。
 提供Range方法: 產生指定起迄的
IEnumerable<int>數字序列。
Linq和Enumerable的關係?
 Enumerable擴展了IEnumerable<T>,
而ForEach只能展開繼承
IEnumerable/IEnumerable<T>的介面。
Linq的火車鏈結式API呼叫法
Fluent Interface
 火車頭物件的型別是IEnumerable<T>,
而呼叫其方法所回傳的型別仍是
IEnumerable<T>,故可以一直接到底。
 注意: 不是所有IEnumerable<T>上的方
法都是回傳IEnumerable<T>。
委派型別
 在C# 3.0版本之前處理委派的方式比較
不靈活。
C# 3.0後的委派型別
 Func<T1,T2, .. , Tout>: 專司有輸出的
委派。
 Action<T1, T2, …> : 僅處理無輸出的
委派。
 Predicate<T>: 回傳為bool,的委派。
延遲執行
 Linq在處理資料時,由於其內部機制的
關係,故其僅會在需要的時候向資料源
要求下一筆資料,而不是一口氣全部取
回。
範例

Contenu connexe

En vedette

En vedette (11)

2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練22015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2
 
Entity framework 與 LINQ
Entity framework 與 LINQEntity framework 與 LINQ
Entity framework 與 LINQ
 
Entity framework 入門第一課
Entity framework 入門第一課Entity framework 入門第一課
Entity framework 入門第一課
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練12015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練42015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
 
P1072014 Un nuevo indicador para medir el desarrollo
P1072014 Un nuevo indicador para medir el desarrolloP1072014 Un nuevo indicador para medir el desarrollo
P1072014 Un nuevo indicador para medir el desarrollo
 
Asp.net mvc 概觀介紹
Asp.net mvc 概觀介紹Asp.net mvc 概觀介紹
Asp.net mvc 概觀介紹
 
Entity framework + Linq 介紹
Entity framework + Linq 介紹Entity framework + Linq 介紹
Entity framework + Linq 介紹
 
อาณาจักรสิ่งมีชีวิต
อาณาจักรสิ่งมีชีวิต อาณาจักรสิ่งมีชีวิต
อาณาจักรสิ่งมีชีวิต
 
Identificacion de peligros evaluacion de riesgos, Identificacion y valoracion...
Identificacion de peligros evaluacion de riesgos, Identificacion y valoracion...Identificacion de peligros evaluacion de riesgos, Identificacion y valoracion...
Identificacion de peligros evaluacion de riesgos, Identificacion y valoracion...
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練6
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練62016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練6
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練6
 

Plus de 國昭 張

Plus de 國昭 張 (20)

8th ddd taiwan study group bounded context integration
8th ddd taiwan study group  bounded context integration8th ddd taiwan study group  bounded context integration
8th ddd taiwan study group bounded context integration
 
Ddd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architectureDdd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architecture
 
20190126 ddd-meetup1
20190126 ddd-meetup120190126 ddd-meetup1
20190126 ddd-meetup1
 
事件風暴-設計衝刺
事件風暴-設計衝刺事件風暴-設計衝刺
事件風暴-設計衝刺
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模
 
單元測試
單元測試單元測試
單元測試
 
Docker實務
Docker實務Docker實務
Docker實務
 
Scrum essential
Scrum essentialScrum essential
Scrum essential
 
Docker進階探討
Docker進階探討Docker進階探討
Docker進階探討
 
Vue
VueVue
Vue
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 
DDD架構設計
DDD架構設計DDD架構設計
DDD架構設計
 
DDD系統分析
DDD系統分析DDD系統分析
DDD系統分析
 
DDD引導
DDD引導DDD引導
DDD引導
 
前端測試
前端測試前端測試
前端測試
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0
 
Redux+react js
Redux+react jsRedux+react js
Redux+react js
 
React js
React jsReact js
React js
 
架構設計-資料存取的選擇
架構設計-資料存取的選擇架構設計-資料存取的選擇
架構設計-資料存取的選擇
 
前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具
 

Linq初階