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

LINQ to SQL 聚合操作完全手冊:Count / Sum / Min / Max / Average / Aggregate

     編輯:關於.NET

聚合算子速查表

算子返回類型延遲執行SQL 對應
Count / LongCountint / long否COUNT(*) / COUNT_BIG(*)
Sum數值類型否SUM(...)
Min / Max元素類型否MIN(...) / MAX(...)
Averagedouble否AVG(...)
Aggregate自定義否無直接對應

Count / LongCount

// 總客戶數
int total = db.Customers.Count();

// 未斷貨產品數
int active = db.Products.Count(p => !p.Discontinued);

// 大數據集用 LongCount
long bigCount = db.BigTable.LongCount();

Sum

// 所有訂單運費總和
decimal totalFreight = db.Orders.Sum(o => o.Freight);

// 所有產品訂貨總量
int totalOnOrder = db.Products.Sum(p => p.UnitsOnOrder);

Min / Max

// 最低單價
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
               };

Average

// 平均運費
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
               };

Aggregate:種子累加器

// 字符串拼接示例
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,財務計算慎用 (精度問題)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved