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在處理資料時,由於其內部機制的
關係,故其僅會在需要的時候向資料源
要求下一筆資料,而不是一口氣全部取
回。
範例

More Related Content

PPTX
Linq實戰
PPT
Hb1004 function3
PPTX
Entity Framework實戰
PDF
Thaba Nchu Business Network session
PDF
Rosalie hoskins digital financial sustainability
PPTX
El bullying.
DOCX
KEEFEKTIFAN TEKNIK STORY TELLING DALAM
PDF
Informacion General - Feria Pymes Plaza del Sol - Abril 2017
Linq實戰
Hb1004 function3
Entity Framework實戰
Thaba Nchu Business Network session
Rosalie hoskins digital financial sustainability
El bullying.
KEEFEKTIFAN TEKNIK STORY TELLING DALAM
Informacion General - Feria Pymes Plaza del Sol - Abril 2017

Viewers also liked (11)

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

More from 國昭 張 (20)

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

Linq初階