認識 LINQ(Language Integrated Query,語言整合查詢):
- C# 提供的一種宣告式查詢語法,將 SQL 風格的查詢能力直接整合進程式語言內部。
- 統一存取介面:不論資料來源是記憶體集合(LINQ to Objects)、資料庫(LINQ to Entities)、XML 或是 JSON,皆能用統一的語法進行過濾、排序與分組。
- 語法風格:分為「方法語法(Method Syntax,搭配 Lambda)」與「查詢語法(Query Syntax,類似 SQL)」,實務上方法語法更具彈性且最常用。
LINQ 與 IEnumerable 介面:
-
- LINQ to Objects 的擴充方法皆定義在 System.Linq 命名空間下的靜態類別 Enumerable 之中。
- 目標對象:只要型別實作了 IEnumerable 介面(如 List、陣列、Dictionary<TKey, TValue> 等),就能直接呼叫 LINQ 擴充方法。
- 延遲執行(Deferred Execution / Lazy Evaluation):
- 呼叫 Where()、Select() 等查詢方法時,不會立即執行運算,而是先建立查詢管線。
- 直到真正列舉資料(如使用 foreach 遍歷、呼叫 ToList()、ToArray()、Count())時,運算才會正式執行。
配合 Where() 方法:
- 用途為條件過濾(篩選),只保留符合條件的元素。
- 接收一個回傳布林值的委派:Func<T, bool>(通常以 Lambda 運算式表示,如 x => x > 5)。
- 支援傳入元素索引的簽章多載:Func<T, bool int,>,可在篩選條件中同時判定元素本身與其索引位置。
實作範例



