Files
17168ERP/web/App_Code/api/FilesSetController.cs
yiming e88821db4b 完成 Batch 2:修復 4 個 API Controller 的 AsEnumerable 問題
修復文件(共 21 處):

1. newsController.cs (7 處)
   - 移除簡單查詢的 AsEnumerable()
   - AsEnumerable() → AsQueryable() (GetList, GetKindList)
   - 優化分頁查詢模式(Count + ToPagedList.ToList())
   - 修復 Split().Select().ToList() 類型問題

2. FilesSetController.cs (5 處)
   - 移除簡單查詢的 AsEnumerable()
   - AsEnumerable() → AsQueryable() (GetList)
   - 優化分頁查詢模式
   - 修復 files_num nullable 字段處理
   - 修復 Split().Select().ToList() 類型問題

3. bedController.cs (5 處)
   - 移除簡單查詢的 AsEnumerable()
   - AsEnumerable() → AsQueryable() (companies, bed_order_detail)
   - 優化分頁查詢模式
   - 簡化查詢條件

4. bed_kindController.cs (4 處)
   - AsEnumerable() → AsQueryable() (bed_kind, bed_kind_detail)
   - 優化分頁查詢模式(兩處)
   - 優化 bedDt 查詢:移除 AsEnumerable(),改用 Where + ToList()
   - 修復 bed_kind_detail_id nullable 字段處理

技術改進:
✓ 所有查詢改為在數據庫執行
✓ 統一使用三元運算符處理分頁
✓ Count 在分頁前執行
✓ 正確處理 nullable 字段(HasValue + .Value)
✓ IEnumerable<int> → List<int> 避免類型轉換錯誤
2025-11-12 17:11:05 +08:00

186 lines
5.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using PagedList;
using Newtonsoft.Json;
using System.Collections;
// api/FilesSet
//[ezAuthorize(Roles = "admin")]//群組:*
[ezAuthorize]
public class FilesSetController : ApiController
{
private Model.ezEntities _db = new Model.ezEntities();
// GET api/<controller>
public IEnumerable<Model.file> Get()
{
var list = _db.files.ToList();
if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return list;
}
public IEnumerable<Model.file> Get(int page, int pageSize = 10,
string sortBy="", bool sortDesc=false)
{
var list = _db.files.OrderBy(o=>o.num).ToPagedList(page, pageSize);
if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return list;
}
// GET api/<controller>/5
public Model.file Get(int id)
{
var item = _db.files.Where(q => q.num == id).FirstOrDefault();
//if (item == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return item;
}
// POST api/<controller>
public void Post([FromBody] Model.file item)
{
}
// PUT api/<controller>/5
public void Put(int id, [FromBody] Model.file item)
{
}
// DELETE api/<controller>/5
public void Delete(int id)
{
var prod = _db.files.Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
if (prod != null)
{
//var prod2 = _db.actItem_files.AsEnumerable().Where(q => q.files_num == id).ToList(); //刪除品項的相關文件
//if (prod2.Count > 0)
//{
// //查詢結果全部刪除
// _db.actItem_files.RemoveRange(prod2);
//}
_db.actItem_files.RemoveRange(prod.actItem_files);
_db.files.Remove(prod);
_db.SaveChanges();//執行
Model.admin_log admin_log = new Model.admin_log();
MyWeb.admin admin = new MyWeb.admin();//api裡不可以用MyWeb
if (admin.isLoign())
{
admin_log.writeLog(admin.info.u_id, (int)Model.admin_log.Systems.Files, (int)Model.admin_log.Status.Delete, prod.subject);
}
}
}
[HttpDelete]
[Route("api/FilesSet/Delete/{nums}")]
public void Delete(string nums)
{
if (!string.IsNullOrEmpty(nums))
{
var ids = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s)).ToList();
var prod = _db.files.Where(q => ids.Contains(q.num)).ToList();
if (prod.Count() > 0)
{
//刪除品項的相關文件
var prod2 = _db.actItem_files.Where(q => q.files_num.HasValue && ids.Contains(q.files_num.Value)).ToList();
if (prod2.Count > 0)
{
_db.actItem_files.RemoveRange(prod2);
}
_db.files.RemoveRange(prod);
_db.SaveChanges();
Model.admin_log admin_log = new Model.admin_log();
MyWeb.admin admin = new MyWeb.admin();//api裡不可以用MyWeb
if (admin.isLoign())
{
admin_log.writeLog(admin.info.u_id, (int)Model.admin_log.Systems.Files, (int)Model.admin_log.Status.Delete, admin_log.LogViewBtn(prod.Select(x => x.subject).ToList()));
}
}
}
}
[HttpGet]
[Route("api/FilesSet/count")]
public int Count()
{
var count = _db.files.Count();
return count;
}
[HttpPost]
[Route("api/FilesSet/GetList")]
public IHttpActionResult GetList([FromBody] Model.ViewModel.files q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
var qry = _db.files.AsQueryable();
if (!string.IsNullOrEmpty(q.subject))
qry = qry.Where(o => o.subject.Contains(q.subject));
if (q.reg_time1.HasValue)
qry = qry.Where(o => o.reg_time >= q.reg_time1.Value);
if (q.reg_time2.HasValue)
qry = qry.Where(o => o.reg_time < Convert.ToDateTime(q.reg_time2.Value).AddDays(1));
if (sortBy.Equals("subject"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.subject);
else
qry = qry.OrderBy(o => o.subject);
}
else if (sortBy.Equals("start_date"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.reg_time);
else
qry = qry.OrderBy(o => o.reg_time);
}
else if (sortBy.Equals("end_date"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.modify_time);
else
qry = qry.OrderBy(o => o.modify_time);
}
else
qry = qry.OrderByDescending(o => o.num);
var count = qry.Count();
var qryList = (pageSize > 0) ? qry.ToPagedList(page, pageSize).ToList() : qry.ToList();
var ret = new
{
list = qryList.Select(x => new
{
num = x.num,
subject = x.subject,
reg_time = x.reg_time,
modify_time = x.modify_time,
word = x.word,
}),
count = count
};
if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret);
}
}