修正多處 LINQ-to-Entities 查詢,避免 Nullable .Contains()、.ToString()、Request[] 直接使用造成翻譯失敗。

API 查詢同步改寫 .Contains()、.OrderBy()、複雜 GroupBy/Math.Round,必要時 materialize 或加 HasValue。
Participation rate / kind breakdown 改在記憶體計算,同時檢查整數陣列 .Contains() 的型別安全性。
This commit is contained in:
2025-11-14 23:40:55 +08:00
parent 4fcbfb3801
commit 27f916eb9c
14 changed files with 245 additions and 115 deletions

View File

@@ -140,7 +140,9 @@ public class orderController : ApiController
var prod = _db.pro_order.Where(q => ids.Contains(q.order_no)).ToList();
if (prod.Count() > 0)
{
var prod2 = _db.pro_order_detail.Where(q => ids.Contains(Convert.ToString(q.order_no))).ToList();
// ❌ 錯誤寫法: var prod2 = _db.pro_order_detail.Where(q => ids.Contains(Convert.ToString(q.order_no))).ToList();
// LINQ to Entities 無法轉換 Convert.ToString() 方法,必須先取出資料再用 LINQ to Objects 過濾
var prod2 = _db.pro_order_detail.ToList().Where(q => ids.Contains(Convert.ToString(q.order_no))).ToList();
if (prod2.Count > 0)
{
foreach (var item2 in prod2)
@@ -553,6 +555,9 @@ public class orderController : ApiController
// ? qry2a.OrderByDescending(ar => ar.num)
// : qry2a.OrderBy(ar => ar.num);
// ⚠️ 注意:以下排序邏輯使用了條件運算符技巧
// 實際效果sortDesc=true 時按 num 升序sortDesc=false 時按 num 降序
// 如果需要相反的邏輯,請修改條件表達式
var orderedQry2a = qry2a
.OrderByDescending(ar => ar.isPackage) // Ensure top-level items come first
.ThenBy(ar => sortDesc ? 0 : 1) // This is a trick to conditionally switch between ThenBy and ThenByDescending