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

LINQ to SQL GroupBy 入門:分組機制、延遲載入與 SQL 轉換原理解析

     編輯:關於C#

GroupBy 基本語法


var q = from p in db.Products
        group p by p.CategoryID into g
        select g;
  • from p in db.Products:取出每筆產品物件 p
  • group p by p.CategoryID:依 CategoryID 分組
  • into g:將分組結果重命名為 g(必須重命名,否則 p 作用域結束)
  • select g:選取群組物件

可省略 into g 直接 group p by p.CategoryID,但較難理解。

實際執行與 SQL 轉換觀察

啟用 db.Log = Console.Out 可見兩階段 SQL:

  1. 第一條:SELECT CategoryID FROM Products GROUP BY CategoryID 取得所有 Key
  2. 後續每群組各一條:SELECT * FROM Products WHERE CategoryID = @x1 載入明細

這是延遲載入特性:群組物件 g 本身不含明細,遍歷時才查詢。

群組物件結構圖解

查詢結果為群組集合,每個群組 g 包含:

  • Key:分組鍵值(如 CategoryID = 8)
  • Results View:該群組所有產品物件(遍歷時載入)

GroupBy 結果結構 群組概念圖

遍歷特定群組明細


var q = from p in db.Products
        group p by p.CategoryID into g
        select g;

foreach (var gp in q) {
    if (gp.Key == 7) { // Seafood
        foreach (var p in gp) { // 觸發載入明細
            // do something
        }
    }
}

核心觀念

  • GroupBy 回傳 IEnumerable>
  • IGrouping 繼承 IEnumerable,可直接 foreach
  • 延遲載入意味著分組查詢與明細查詢分離,效能取決於使用模式
  • 若只需聚合統計,請在 select 中直接呼叫 g.Count() 等,避免載入明細
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved