LINQ (Language Integrated Query) 提供類 SQL 的宣告式查詢語法,核心關鍵字:from、where、orderby、select、group、into。
int[] numbers = { 8, 5, 89, 3, 56, 4, 1, 58 };
// 查詢小於 5 的數字並排序
var query = from n in numbers
where n < 5
orderby n
select n;
foreach (var n in query) Console.WriteLine(n);
// 輸出: 1, 3, 4
為了支援 Visual Studio IntelliSense 智慧感知。若 select 在前,編譯器在輸入 select n. 時無法推斷 n 的型別,無法提供屬性提示。將 from n in numbers 寫在前,型別推斷即可在 select 時生效。VB 9 早期曾嘗試 Select 在前,後統一改為 From 領先。
string[] languages = { "Java", "C#", "C++", "Delphi", "VB.NET", "VC.NET", "C++ Builder", "Kylix", "Perl", "Python" };
// 依字串長度分群,群組按長度遞減排序
var query = from lang in languages
orderby lang
group lang by lang.Length into lengthGroups
orderby lengthGroups.Key descending
select lengthGroups;
foreach (var group in query)
{
Console.WriteLine($"長度 {group.Key}:");
foreach (var lang in group) Console.WriteLine($" {lang}");
}
| 關鍵字 | 用途 |
|---|---|
from | 指定資料來源與範圍變數 |
where | 篩選條件 (lambda: n => n < 5) |
orderby | 排序,可 ascending/descending |
select | 投影結果形狀 |
group ... by | 分群,結果為 IGrouping<TKey, TElement> |
into | 將前一查詢結果作為後續查詢的產生器 (配合 group/join/select) |
let | 引入查詢範圍內的暫時變數 |
join | 內部聯結兩個序列 |
SQL 受限於二維表格結構,GROUP BY 僅能搭配彙總函式;LINQ group by 產生階層式群組物件,保留原始元素,支援更靈活的後續查詢 (如對群組內元素再排序、篩選)。