深入解析 LINQ to SQL 的分組查詢與存在性檢查運算子對應 SQL 行為。
var q = from p in db.Products
group p by p.CategoryID into g
select g;
into g 重新命名分組結果,後續只能存取 g.Key 與彙總函數。
var q = from p in db.Products
group p by p.CategoryID into g
select new { CategoryID = g.Key, Count = g.Count(), MaxPrice = g.Max(p => p.UnitPrice) };
| 運算子 | SQL 對應 | 說明 |
|---|---|---|
| Any() | EXISTS | 子查詢至少一筆 |
| All() | NOT EXISTS (反向) | 所有符合條件 |
| Contains() | IN | 集合包含判斷 |
| In (陣列) | IN | new[] {1,2,3}.Contains(x) |
var q = from c in db.Customers
where c.Orders.Any()
select c;
int[] catIds = {1,2,3};
var q = from p in db.Products
where catIds.Contains(p.CategoryID)
select p;
善用 Any/Contains 可產生高效的 EXISTS/IN SQL,避免 JOIN 產生重複資料列。