首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 3.0 LINQ 查詢語法完整指南:從基礎到 GroupBy 進階

     編輯:關於C語言

前言

LINQ(Language Integrated Query)是 C# 3.0 核心特性,提供類 SQL 的查詢語法整合在語言中。本文從基本查詢、語法設計哲學、into 關鍵字、GroupBy 進階用法全面解析。

一、基礎查詢語法

int[] arr = { 8, 5, 89, 3, 56, 4, 1, 58 };

// 查詢小於 5 的數字,依大小排序
var m = from n in arr
        where n < 5
        orderby n
        select n;

foreach (var n in m)
    Console.WriteLine(n); // 輸出:1, 3, 4

語法結構對照 SQL

LINQSQL說明
from n in arrFROM table資料來源
where n < 5WHERE col < 5篩選條件
orderby nORDER BY col排序
select nSELECT col投影/選取

二、為什麼 LINQ 以 from 開頭而非 select?

核心原因:IDE 智慧感知(IntelliSense)體驗。

歷史演進

  • VB9 CTP 早期版本採用 Select ... From ... 順序
  • 問題:輸入 Select p. 時,p 型別未知(因 From p In persons 尚未輸入),無法提供屬性提示
  • 微軟 IDE 團隊權衡後決定:先 from 確立資料來源與範圍變數型別,再 select 享有完整智慧感知
  • VB9 後續版本改為與 C# 一致的 From ... Select ... 順序

程式碼撰寫流程對比

// Select 開頭(舊 VB9):寫到 Select p. 卡住,必須先寫 From 再跳回修改
Select p.Name, p.Age From p In persons Where ...

// From 開頭(C# / 現代 VB):自然順序,智慧感知全程可用
from p in persons
where ...
select p.Name, p.Age

三、進階查詢:GroupBy + Into 關鍵字

需求:將程式語言依字串長度分組,組內按字母序,組間按長度遞減排序。

string[] languages = { "Java", "C#", "C++", "Delphi", "VB.net", "VC.Net", "C++ Builder", "Kylix", "Perl", "Python" };

var query = from item in languages
            orderby item
            group item by item.Length into lengthGroups
            orderby lengthGroups.Key descending
            select lengthGroups;

foreach (var group in query)
{
    Console.WriteLine($"strings of length {group.Key}");
    foreach (var val in group)
        Console.WriteLine(val);
}

關鍵字 into 解析

  • into lengthGroups:將前一步驟(group by)的結果繼續作為下一個查詢的產生器
  • 相當於建立「查詢續集」,可接續 where、orderby、select
  • 常搭配 group ... by ... into、join ... into、select ... into 使用

LINQ GroupBy vs SQL GROUP BY 差異

特性SQL GROUP BYLINQ GroupBy
資料結構二維表格(扁平)階層式群組物件(IGrouping)
彈性受限於關聯模型物件導向,可保留完整元素、巢狀查詢
後續處理需子查詢或 JOIN直接 foreach 群組、投影、再分組

LINQ GroupBy 回傳 IEnumerable>,每個 IGrouping 本身即 IEnumerable,極具表達力。

四、查詢語法 vs 方法語法

上述查詢語法編譯後會轉換為方法語法(Lambda 運算式):

// 查詢語法
var q = from n in arr where n < 5 orderby n select n;

// 等價方法語法
var m = arr.Where(n => n < 5).OrderBy(n => n).Select(n => n);

兩者無效能差異,查詢語法較適合複雜多子句查詢,方法語法適合簡單鏈結。

五、總結

  • LINQ 查詢語法以 from 開頭,為智慧感知設計
  • into 關鍵字實現查詢續集,支援 group by 後續處理
  • LINQ GroupBy 回傳階層式群組,比 SQL 更靈活強大
  • 掌握查詢語法與方法語法互轉,靈活選擇最適風格
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved