LINQ 將查詢提升為 .NET 中的一等編程概念,支援 XML、數據庫、對象等多種數據源。本文介紹查詢表達式語法、其向方法調用的編譯時轉換,以及帶來的代碼優勢。
LINQ 查詢表達式類似 SQL/XQuery,由 from 開始,以 select 或 group 結尾:
var result = from c in Customers
where c.City.StartsWith("B")
orderby c.LastName
select new { c.FirstName, c.LastName, c.Address };
C# 編譯器遇到查詢表達式,會將其編譯時轉換為等價的擴展方法調用鏈(使用 Lambda 表達式):
var result = Customers
.Where(c => c.City.StartsWith("B"))
.OrderBy(c => c.LastName)
.Select(c => new { c.FirstName, c.LastName, c.Address });
| 維度 | 查詢表達式 | 方法語法 |
|---|---|---|
| 可讀性 | ⭐⭐⭐ 類 SQL,聲明式,適合複雜連接/分組 | ⭐⭐ 函數式鏈式,適合簡單過濾/投影 |
| 智能感知 | ⭐⭐⭐ 完整支援範圍變量 | ⭐⭐⭐ 同等支援 |
| 功能覆蓋 | 核心子集 | 全集(如 Single、Take 等無查詢語法對應) |
| 混用 | 可在查詢表達式中調用方法,或對查詢結果繼續鏈式調用 | |
from / let / where / orderby / select / group / join / intoc)在 from 到 select/group 之間有效。查詢表達式讓數據查詢代碼更接近自然語言,降低認知負荷。理解其向方法調用的轉換機制,有助於在需要時靈活切換至方法語法,發揮兩者各自優勢。