| 算子 | 返回類型 | 延遲執行 | SQL 對應 |
|---|---|---|---|
| Count / LongCount | int / long | 否 | COUNT(*) / COUNT_BIG(*) |
| Sum | 數值類型 | 否 | SUM(...) |
| Min / Max | 元素類型 | 否 | MIN(...) / MAX(...) |
| Average | double | 否 | AVG(...) |
| Aggregate | 自定義 | 否 | 無直接對應 |
// 總客戶數
int total = db.Customers.Count();
// 未斷貨產品數
int active = db.Products.Count(p => !p.Discontinued);
// 大數據集用 LongCount
long bigCount = db.BigTable.LongCount();
// 所有訂單運費總和
decimal totalFreight = db.Orders.Sum(o => o.Freight);
// 所有產品訂貨總量
int totalOnOrder = db.Products.Sum(p => p.UnitsOnOrder);
// 最低單價
decimal minPrice = db.Products.Min(p => p.UnitPrice);
// 最低運費
decimal minFreight = db.Orders.Min(o => o.Freight);
// 每類最低價產品 (分組 + 元素選擇)
var cheapest = from p in db.Products
group p by p.CategoryID into g
select new {
CategoryID = g.Key,
CheapestProducts = from p2 in g
where p2.UnitPrice == g.Min(p3 => p3.UnitPrice)
select p2
};
// 平均運費
double avgFreight = db.Orders.Average(o => o.Freight);
// 平均單價
double avgPrice = db.Products.Average(p => p.UnitPrice);
// 每類高於平均價的產品
var aboveAvg = from p in db.Products
group p by p.CategoryID into g
select new {
g.Key,
ExpensiveProducts = from p2 in g
where p2.UnitPrice > g.Average(p3 => p3.UnitPrice)
select p2
};
// 字符串拼接示例
string csv = db.Products
.Select(p => p.ProductName)
.Aggregate((seed, next) => seed + ", " + next);
// 帶種子值
int sum = db.Products.Aggregate(0, (total, p) => total + p.UnitsInStock);
無種子時首個元素作種子;適用於複雜累加邏輯 (如條件累加、多字段聚合)。
g.Max()) 在資料庫端完成,高效LongCount 避免超過 int.MaxValue 溢出Average 返回 double,財務計算慎用 (精度問題)