完成 Batch 3:修復 4 個 API Controller 的 AsEnumerable 問題
修復文件(共 17 處):
1. supplierController.cs (6 處)
- 移除簡單查詢的 AsEnumerable() (2 處)
- AsEnumerable() → AsQueryable() (GetList, GetKindList)
- 優化分頁查詢模式(Count + ToPagedList.ToList())(2 處)
- 修復 Split().Select().ToList() 類型問題
2. adminUserController.cs (4 處)
- 移除簡單查詢的 AsEnumerable()
- AsEnumerable() → AsQueryable() (GetList)
- 優化分頁查詢模式
- 重構複雜查詢:移除嵌套的 AsEnumerable()
改為先 ToList() 再使用 Contains
3. orderdetailController.cs (3 處)
- 移除 AsEnumerable(),改為在查詢末端使用 OrderBy
- 優化分頁查詢模式
- 修復 null-propagating operator:
.FirstOrDefault()?.print_id → .Select(u => u.print_id).FirstOrDefault()
4. transfer_registerController.cs (6 處)
- AsEnumerable() → ToList() (需要解密操作的情況)
- 保留在必要時才轉換到內存操作
- 確保數據庫查詢先執行
技術改進:
✓ 複雜嵌套查詢優化(adminUserController)
✓ 解密操作前置優化(transfer_registerController)
✓ Null-propagating operator 替換為安全的 Select
✓ 統一使用三元運算符處理分頁
✓ IEnumerable<int> → List<int> 避免類型轉換錯誤
This commit is contained in:
@@ -52,7 +52,7 @@ public class adminUserController : ApiController
|
|||||||
// DELETE api/<controller>/5
|
// DELETE api/<controller>/5
|
||||||
public void Delete(int id)
|
public void Delete(int id)
|
||||||
{
|
{
|
||||||
var prod = _db.admins.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
|
var prod = _db.admins.Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
|
||||||
if (prod != null)
|
if (prod != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ public class adminUserController : ApiController
|
|||||||
public IHttpActionResult GetList([FromBody] Model.ViewModel.admin q, int page, int pageSize = 10,
|
public IHttpActionResult GetList([FromBody] Model.ViewModel.admin q, int page, int pageSize = 10,
|
||||||
string sortBy = "", bool sortDesc = false)
|
string sortBy = "", bool sortDesc = false)
|
||||||
{
|
{
|
||||||
var qry = _db.admins.AsEnumerable();
|
var qry = _db.admins.AsQueryable();
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(q.u_id))
|
if (!string.IsNullOrEmpty(q.u_id))
|
||||||
qry = qry.Where(o => o.u_id.Contains(q.u_id));
|
qry = qry.Where(o => o.u_id.Contains(q.u_id));
|
||||||
@@ -90,17 +90,14 @@ public class adminUserController : ApiController
|
|||||||
|
|
||||||
if(q.removeExist.HasValue && q.removeExist.Value)
|
if(q.removeExist.HasValue && q.removeExist.Value)
|
||||||
{
|
{
|
||||||
|
var existingAdminNums = _db.members.Select(b => b.admin_num).ToList();
|
||||||
if (q.num.HasValue && q.num.Value > 0)
|
if (q.num.HasValue && q.num.Value > 0)
|
||||||
{
|
{
|
||||||
qry = qry.Where(o => (!(from b in _db.members.AsEnumerable()
|
qry = qry.Where(o => !existingAdminNums.Contains(o.num) || o.num == q.num.Value);
|
||||||
select b.admin_num)
|
|
||||||
.Contains(o.num)) || o.num == Convert.ToInt32(q.num.Value));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qry = qry.Where(o => (!(from b in _db.members.AsEnumerable()
|
qry = qry.Where(o => !existingAdminNums.Contains(o.num));
|
||||||
select b.admin_num)
|
|
||||||
.Contains(o.num)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,9 +111,12 @@ public class adminUserController : ApiController
|
|||||||
else
|
else
|
||||||
qry = qry.OrderByDescending(o => o.num);
|
qry = qry.OrderByDescending(o => o.num);
|
||||||
|
|
||||||
|
var count = qry.Count();
|
||||||
|
var qryList = (pageSize > 0) ? qry.ToPagedList(page, pageSize).ToList() : qry.ToList();
|
||||||
|
|
||||||
var ret = new
|
var ret = new
|
||||||
{
|
{
|
||||||
list = qry.ToPagedList(page, pageSize).Select(x => new
|
list = qryList.Select(x => new
|
||||||
{
|
{
|
||||||
num = x.num,
|
num = x.num,
|
||||||
u_id = x.u_id,
|
u_id = x.u_id,
|
||||||
@@ -124,7 +124,7 @@ public class adminUserController : ApiController
|
|||||||
power = x.power,
|
power = x.power,
|
||||||
|
|
||||||
}),
|
}),
|
||||||
count = qry.Count()
|
count = count
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -27,14 +27,14 @@ public class orderdetailController:ApiController
|
|||||||
//var OrderList = _db.pro_order.Where(u => u.activity_num == activity_num).Select(j => j.order_no).ToList();
|
//var OrderList = _db.pro_order.Where(u => u.activity_num == activity_num).Select(j => j.order_no).ToList();
|
||||||
//var gdzOrderList = _db.pro_order_detail.Where(o => OrderList.Contains(o.order_no) && o.print_id.Contains("主")).Select(o => o.order_no).Distinct().ToList();
|
//var gdzOrderList = _db.pro_order_detail.Where(o => OrderList.Contains(o.order_no) && o.print_id.Contains("主")).Select(o => o.order_no).Distinct().ToList();
|
||||||
//var qry = _db.pro_order.Where(u => gdzOrderList.Contains(u.order_no)).AsEnumerable();
|
//var qry = _db.pro_order.Where(u => gdzOrderList.Contains(u.order_no)).AsEnumerable();
|
||||||
var qry = _db.pro_order.Where( u => u.activity_num == activity_num).AsEnumerable();
|
var qry = _db.pro_order.Where( u => u.activity_num == activity_num).OrderByDescending(o => o.reg_time);
|
||||||
|
|
||||||
qry = qry.OrderByDescending(o => o.reg_time);
|
|
||||||
|
|
||||||
var count = qry.Count(); //pageSize = count;//一次取回??
|
var count = qry.Count(); //pageSize = count;//一次取回??
|
||||||
|
var qryList = (pageSize > 0) ? qry.ToPagedList(page, pageSize).ToList() : qry.ToList();
|
||||||
|
|
||||||
var ret = new
|
var ret = new
|
||||||
{
|
{
|
||||||
list = qry.ToPagedList(page, pageSize).Select(x => new
|
list = qryList.Select(x => new
|
||||||
{
|
{
|
||||||
order_no = x.order_no,
|
order_no = x.order_no,
|
||||||
f_num = x.f_num,
|
f_num = x.f_num,
|
||||||
@@ -50,7 +50,7 @@ public class orderdetailController:ApiController
|
|||||||
|| u.actItem.subject.Contains("牌")
|
|| u.actItem.subject.Contains("牌")
|
||||||
|| !string.IsNullOrEmpty(u.f_num_tablet))
|
|| !string.IsNullOrEmpty(u.f_num_tablet))
|
||||||
.Count(),
|
.Count(),
|
||||||
actItem = x.pro_order_detail.Where(u => u.printed_files != null).FirstOrDefault()?.print_id }
|
actItem = x.pro_order_detail.Where(u => u.printed_files != null).Select(u => u.print_id).FirstOrDefault() }
|
||||||
}),
|
}),
|
||||||
count = count
|
count = count
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public class supplierController : BaseApiController
|
|||||||
// DELETE api/<controller>/5
|
// DELETE api/<controller>/5
|
||||||
public void Delete(int id)
|
public void Delete(int id)
|
||||||
{
|
{
|
||||||
var prod = _db.suppliers.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
|
var prod = _db.suppliers.Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
|
||||||
if (prod != null)
|
if (prod != null)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(prod.pic1))
|
if (!string.IsNullOrEmpty(prod.pic1))
|
||||||
@@ -80,8 +80,8 @@ public class supplierController : BaseApiController
|
|||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(nums))
|
if (!string.IsNullOrEmpty(nums))
|
||||||
{
|
{
|
||||||
var ids = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s));
|
var ids = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s)).ToList();
|
||||||
var prod = _db.suppliers.AsEnumerable().Where(q => ids.Contains(q.num)).ToList();
|
var prod = _db.suppliers.Where(q => ids.Contains(q.num)).ToList();
|
||||||
if (prod.Count() > 0)
|
if (prod.Count() > 0)
|
||||||
{
|
{
|
||||||
publicFun publicFun = new publicFun();
|
publicFun publicFun = new publicFun();
|
||||||
@@ -113,7 +113,7 @@ public class supplierController : BaseApiController
|
|||||||
public IHttpActionResult GetList([FromBody] Model.ViewModel.supplier q, int page, int pageSize = 10,
|
public IHttpActionResult GetList([FromBody] Model.ViewModel.supplier q, int page, int pageSize = 10,
|
||||||
string sortBy = "", bool sortDesc = false)
|
string sortBy = "", bool sortDesc = false)
|
||||||
{
|
{
|
||||||
var qry = _db.suppliers.AsEnumerable();
|
var qry = _db.suppliers.AsQueryable();
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(q.u_name))
|
if (!string.IsNullOrEmpty(q.u_name))
|
||||||
qry = qry.Where(o => o.u_name.Contains(q.u_name.Trim()));
|
qry = qry.Where(o => o.u_name.Contains(q.u_name.Trim()));
|
||||||
@@ -159,9 +159,12 @@ public class supplierController : BaseApiController
|
|||||||
else
|
else
|
||||||
qry = qry.OrderByDescending(o => o.num);
|
qry = qry.OrderByDescending(o => o.num);
|
||||||
|
|
||||||
|
var count = qry.Count();
|
||||||
|
var qryList = (pageSize > 0) ? qry.ToPagedList(page, pageSize).ToList() : qry.ToList();
|
||||||
|
|
||||||
var ret = new
|
var ret = new
|
||||||
{
|
{
|
||||||
list = qry.ToPagedList(page, pageSize).Select(x => new
|
list = qryList.Select(x => new
|
||||||
{
|
{
|
||||||
num = x.num,
|
num = x.num,
|
||||||
u_name = x.u_name,
|
u_name = x.u_name,
|
||||||
@@ -176,7 +179,7 @@ public class supplierController : BaseApiController
|
|||||||
}).ToList(), x.kind) : "",
|
}).ToList(), x.kind) : "",
|
||||||
|
|
||||||
}),
|
}),
|
||||||
count = qry.Count()
|
count = count
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -192,7 +195,7 @@ public class supplierController : BaseApiController
|
|||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
var qry = _db.supplier_kind.AsEnumerable();
|
var qry = _db.supplier_kind.AsQueryable();
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(q.kind))
|
if (!string.IsNullOrEmpty(q.kind))
|
||||||
qry = qry.Where(o => o.kind.Contains(q.kind));
|
qry = qry.Where(o => o.kind.Contains(q.kind));
|
||||||
@@ -205,17 +208,18 @@ public class supplierController : BaseApiController
|
|||||||
range = o.range,
|
range = o.range,
|
||||||
}).OrderBy(x => x.root).ThenBy(x => x.kind).ToList(), 0, 0);
|
}).OrderBy(x => x.root).ThenBy(x => x.kind).ToList(), 0, 0);
|
||||||
|
|
||||||
|
var count = qry.Count();
|
||||||
|
var qry2List = (pageSize > 0) ? qry2.ToPagedList(page, pageSize).ToList() : qry2.ToList();
|
||||||
|
|
||||||
var ret = new
|
var ret = new
|
||||||
{
|
{
|
||||||
list = qry2.ToPagedList(page, pageSize).Select(x => new
|
list = qry2List.Select(x => new
|
||||||
{
|
{
|
||||||
num = x.num,
|
num = x.num,
|
||||||
kind = new TreeView().RptDash(x.Level) + x.kind,
|
kind = new TreeView().RptDash(x.Level) + x.kind,
|
||||||
|
|
||||||
}),
|
}),
|
||||||
count = qry.Count()
|
count = count
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ public class transfer_registerController : ApiController
|
|||||||
x.draft,
|
x.draft,
|
||||||
follower = x.f_num != null ? _db.followers
|
follower = x.f_num != null ? _db.followers
|
||||||
.Where(f => f.num == x.f_num)
|
.Where(f => f.num == x.f_num)
|
||||||
.AsEnumerable()
|
.ToList()
|
||||||
.Select(f => new {
|
.Select(f => new {
|
||||||
f.num,
|
f.num,
|
||||||
f.u_name,
|
f.u_name,
|
||||||
@@ -417,7 +417,7 @@ public class transfer_registerController : ApiController
|
|||||||
d.demo,
|
d.demo,
|
||||||
reg_time = o.reg_time // 報名日期
|
reg_time = o.reg_time // 報名日期
|
||||||
}))
|
}))
|
||||||
.AsEnumerable()
|
.ToList()
|
||||||
.Select(x => new {
|
.Select(x => new {
|
||||||
x.order_no,
|
x.order_no,
|
||||||
x.activity_num,
|
x.activity_num,
|
||||||
@@ -481,7 +481,7 @@ public class transfer_registerController : ApiController
|
|||||||
x.draft,
|
x.draft,
|
||||||
follower = x.f_num != null ? _db.followers
|
follower = x.f_num != null ? _db.followers
|
||||||
.Where(f => f.num == x.f_num)
|
.Where(f => f.num == x.f_num)
|
||||||
.AsEnumerable()
|
.ToList()
|
||||||
.Select(f => new {
|
.Select(f => new {
|
||||||
f.num,
|
f.num,
|
||||||
f.u_name,
|
f.u_name,
|
||||||
@@ -817,7 +817,7 @@ public class transfer_registerController : ApiController
|
|||||||
tr.balance_act_item,
|
tr.balance_act_item,
|
||||||
balance_actitem_name = tr.balance_act_item != null ? _db.actItems.Where(a => a.num == tr.balance_act_item).Select(a => a.subject).FirstOrDefault() : ""
|
balance_actitem_name = tr.balance_act_item != null ? _db.actItems.Where(a => a.num == tr.balance_act_item).Select(a => a.subject).FirstOrDefault() : ""
|
||||||
})
|
})
|
||||||
.AsEnumerable()
|
.ToList()
|
||||||
.Select(tr => new
|
.Select(tr => new
|
||||||
{
|
{
|
||||||
tr.id,
|
tr.id,
|
||||||
@@ -1054,7 +1054,7 @@ public class transfer_registerController : ApiController
|
|||||||
d.price,
|
d.price,
|
||||||
paid = d.pro_order_record.Select(r => r.price).DefaultIfEmpty(0).Sum()
|
paid = d.pro_order_record.Select(r => r.price).DefaultIfEmpty(0).Sum()
|
||||||
}))
|
}))
|
||||||
.AsEnumerable()
|
.ToList()
|
||||||
.Select(x => new {
|
.Select(x => new {
|
||||||
x.f_num,
|
x.f_num,
|
||||||
x.follower_name,
|
x.follower_name,
|
||||||
@@ -1104,7 +1104,7 @@ public class transfer_registerController : ApiController
|
|||||||
d.demo,
|
d.demo,
|
||||||
reg_time = o.reg_time // 報名日期
|
reg_time = o.reg_time // 報名日期
|
||||||
}))
|
}))
|
||||||
.AsEnumerable()
|
.ToList()
|
||||||
.Select(x => new {
|
.Select(x => new {
|
||||||
x.order_no,
|
x.order_no,
|
||||||
x.activity_num,
|
x.activity_num,
|
||||||
|
|||||||
Reference in New Issue
Block a user