優化 transfer_registerController.cs 中的 AsEnumerable 位置

問題:
之前將某些 AsEnumerable() 改為 ToList() 可能導致數據過載

優化:
1. GetFollowerOrders (Line 420)
   - 改回 AsEnumerable()
   - 原因:雖然有 f_num 限制,但信眾可能有大量訂單
   - AsEnumerable() 確保數據庫查詢先執行,只在需要內存計算時才轉換

2. GetActivityFollowers (Line 1057)
   - 改回 AsEnumerable()
   - 原因:activity_num 限制可能包含大量訂單(數千條)
   - AsEnumerable() 避免將所有數據載入內存

保持不變:
- Line 240:follower 查詢的 ToList() 保持不變
  原因:Where(f.num == x.f_num) 限制為單一記錄
  需要在內存中執行解密操作

技術原則:
- AsEnumerable() 應該在「數據庫查詢完成後、內存計算前」使用
- ToList() 只在「確定數據量小」或「必須立即執行」時使用
- 解密等無法在數據庫執行的操作必須在內存中進行
This commit is contained in:
2025-11-12 17:20:36 +08:00
parent 4e26dd648d
commit 1698b51d19

View File

@@ -417,7 +417,7 @@ public class transfer_registerController : ApiController
d.demo,
reg_time = o.reg_time // 報名日期
}))
.ToList()
.AsEnumerable() // 只在需要內存計算前轉換
.Select(x => new {
x.order_no,
x.activity_num,
@@ -1054,7 +1054,7 @@ public class transfer_registerController : ApiController
d.price,
paid = d.pro_order_record.Select(r => r.price).DefaultIfEmpty(0).Sum()
}))
.ToList()
.AsEnumerable() // 只在需要內存計算前轉換
.Select(x => new {
x.f_num,
x.follower_name,