var q = from p in db.Products
group p by p.CategoryID into g
select g;
from p in db.Products:取出每筆產品物件 pgroup p by p.CategoryID:依 CategoryID 分組into g:將分組結果重命名為 g(必須重命名,否則 p 作用域結束)select g:選取群組物件可省略 into g 直接 group p by p.CategoryID,但較難理解。
啟用 db.Log = Console.Out 可見兩階段 SQL:
SELECT CategoryID FROM Products GROUP BY CategoryID 取得所有 KeySELECT * FROM Products WHERE CategoryID = @x1 載入明細這是延遲載入特性:群組物件 g 本身不含明細,遍歷時才查詢。
查詢結果為群組集合,每個群組 g 包含:
Key:分組鍵值(如 CategoryID = 8)Results View:該群組所有產品物件(遍歷時載入)

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
}
}
}
IEnumerable> IGrouping 繼承 IEnumerable,可直接 foreachselect 中直接呼叫 g.Count() 等,避免載入明細