Files
17168ERP/web/App_Code/api/bed_kindController.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

225 lines
6.7 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;
[ezAuthorize]
public class bed_kindController : ApiController
{
private Model.ezEntities _db = new Model.ezEntities();
// GET api/<controller>
public IEnumerable<Model.bed_kind> Get()
{
var list = _db.bed_kind.ToList();
if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return list;
}
// GET api/<controller>/5
public Model.bed_kind Get(int id)
{
var item = _db.bed_kind.Where(q => q.num == id).FirstOrDefault();
return item;
}
// POST api/<controller>
public void Post([FromBody] string value)
{
}
// PUT api/<controller>/5
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/<controller>/5
public void Delete(int id)
{
}
[HttpGet]
[Route("api/bed_kind/count")]
public int Count()
{
var count = _db.bed_kind.Count();
return count;
}
[HttpPost]
[Route("api/bed_kind/GetList")]
public IHttpActionResult GetList([FromBody] Model.ViewModel.bed_kind q,
int page, int pageSize = 10, string sortBy = "", bool sortDesc = false)
{
var qry = _db.bed_kind.AsQueryable();
if (!string.IsNullOrEmpty(q.kind))
qry = qry.Where(o => o.kind.Contains(q.kind));
if (!string.IsNullOrEmpty(q.sex))
qry = qry.Where(o => o.sex == q.sex);
if (q.root.HasValue)
qry = qry.Where(o => o.root.Value == q.root.Value);
qry = qry.OrderBy(o => o.range).ThenBy(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,
kind = x.kind,
sex = x.sex,
}),
count = count
};
return Ok(ret);
}
[HttpPost]
[Route("api/bed_kind/GetDetailList")]
public IHttpActionResult GetDetailList([FromBody] Model.ViewModel.bed_kind_detail q,
int page, int pageSize = 10, string sortBy = "", bool sortDesc = false)
{
var tdesc = publicFun.enum_desc<Model.bed_kind.bed_type>();
//var tdesc2 = tdesc.ToArray().Select(x=>x.Value); //[0]單人床,[1]雙人床
//var tdesc3 = tdesc.ToArray().Select(x=>x.Key); //[0]1,[1]2
var qry = _db.bed_kind_detail.AsQueryable();
if (q.bed_kind_id.HasValue)
qry = qry.Where(o => o.bed_kind_id == q.bed_kind_id);
if (!string.IsNullOrEmpty(q.bed_name))
qry = qry.Where(o => o.bed_name.Contains(q.bed_name));
if (q.bed_type.HasValue)
qry = qry.Where(o => o.bed_type == q.bed_type);
if (!string.IsNullOrEmpty(q.bed_type_txt))
{
List<string> _bednums = new List<string>();
foreach (var ii in tdesc)
if(ii.Value.IndexOf(q.bed_type_txt) > -1)
_bednums.Add(ii.Key.ToString());
qry = qry.Where(o => _bednums.Contains( o.bed_type.Value.ToString()));
}
if (q.inTime.HasValue )
{
//判斷日期沒庫存不能選
var bedDt = _db.bed_order_detail.Where(f => f.checkIn_date.HasValue && f.checkIn_date ==q.inTime.Value && f.bed_kind_detail_id.HasValue).Select(f => f.bed_kind_detail_id.Value).ToList();//掛單表單明細
qry = qry.Where(o => !bedDt.Contains(o.num));
}
qry = qry.OrderBy(o => o.bed_name);
int i = 1;
var count = qry.Count();
var qryList = (pageSize > 0) ? qry.ToPagedList(page, pageSize).ToList() : qry.ToList();
var ret = new
{
list = qryList.Select(x => new
{
id = i++,
num = x.num,
bed_name = x.bed_name,
bed_type = x.bed_type,
bed_type_txt = x.bed_type.HasValue? tdesc[x.bed_type ?? 1] : "",
demo = x.demo,
}),
count = count
};
return Ok(ret);
}
[HttpPost]
[Route("api/bed_kind/SaveBedKindDetail")]
public IHttpActionResult SaveActKindDetail([FromBody] Model.bed_kind_detail item)
{
if (item.bed_kind_id > 0)
{
//if有資料-修改 , else 新增
if (item.num > 0)
{
Model.bed_kind_detail _detail = _db.bed_kind_detail.Where(q => q.num == item.num).FirstOrDefault();//修改
if (_detail != null)
{
_detail.bed_name = item.bed_name;
if (item.bed_type.HasValue) { _detail.bed_type = item.bed_type.Value; }
else { _detail.bed_type = null; }
_detail.demo = item.demo;
_db.SaveChanges();
var ret = _detail.num;
return Ok(ret);
}
else
return NotFound();
}
else
{
Model.bed_kind_detail _detail = new Model.bed_kind_detail();//新增
_detail.bed_kind_id = item.bed_kind_id;
_detail.bed_name = item.bed_name;
if (item.bed_type.HasValue) { _detail.bed_type = item.bed_type.Value; }
else { _detail.bed_type = null; }
_detail.demo = item.demo;
_db.bed_kind_detail.Add(_detail);
_db.SaveChanges();
var ret = _detail.num;
return Ok(ret);
}
}
else
{
return NotFound();
}
}
[HttpDelete]
[Route("api/bed_kind/DeleteBedKindDetail/{id}")]//刪除分類的detail
public void DeleteActKindDetail(int id)
{
var prod = _db.bed_kind_detail.Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
if (prod != null)
{
//清空掛單資料
//way1
prod.bed_order_detail.Clear();
//way2
//foreach (var item2 in prod.bed_order_detail)
// item2.bed_kind_detail_id = null;
//way3
//var prod2 = _db.bed_order_detail.AsEnumerable().Where(q => q.bed_kind_detail_id == prod.num).ToList();
//if (prod2.Count > 0)
//{
// //清空分類
// foreach (var item2 in prod2)
// item2.bed_kind_detail_id = null;
//}
_db.bed_kind_detail.Remove(prod);
_db.SaveChanges(); //執行
}
}
}