首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# LINQ 實現 SQL CEILING 分組聚合查詢

     編輯:程式設計綜合問答

SQL 原語

SELECT goodsid, CEILING(qs), SUM(money)
FROM md
GROUP BY goodsid, CEILING(qs)

LINQ 翻譯

var result = from x in md
             group x by new { x.goodsid, cqs = Math.Ceiling(x.qs) } into g
             select new {
                 g.Key.goodsid,
                 g.Key.cqs,
                 sum = g.Sum(y => y.money)
             };

關鍵點解析

  • 匿名類型分組鍵:new { goodsid, cqs = Math.Ceiling(qs) } 將分組依據封裝為不可變對象,LINQ 自動實現 Equals/GetHashCode。
  • Math.Ceiling:對應 SQL CEILING,返回 double,若 qs 為 decimal 需轉型 (double)qs。
  • 延遲執行:查詢定義不執行,調用 ToList() 或迭代時才發 SQL(若為 EF/IQueryable)。

Method 語法對照

var result = md
    .GroupBy(x => new { x.goodsid, cqs = Math.Ceiling(x.qs) })
    .Select(g => new { g.Key.goodsid, g.Key.cqs, sum = g.Sum(y => y.money) });

性能提示

  • 若 md 為記憶體集合 (List<T>) 無索引,分組為 O(n) 內存操作。
  • 若為 EF Core,確保 goodsid、qs 有索引,生成 SQL 含 GROUP BY、CEILING。
  • 大數據量考慮分頁或服務端聚合,避免全量拉取到內存。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved