修復 Batch 1 中 IEnumerable.Contains 的型別轉換問題

問題:
- Split().Select(int.Parse) 返回 IEnumerable<int>
- LINQ to Entities 中使用 Contains 需要具體集合類型

修復:
- 在所有 Split().Select() 後加 .ToList()
- 確保 EF 可以將 Contains 轉換為 SQL IN 子句

影響文件:
- memberController.cs (2 處)
- accountingController.cs (1 處)
- FollowerController.cs (1 處)
- stockController.cs (1 處)

技術說明:
LINQ to Entities 要求 Contains 的集合參數是具體化的集合(List/Array),
而不能是延遲執行的 IEnumerable,以便正確生成 SQL 查詢。
This commit is contained in:
2025-11-12 17:01:49 +08:00
parent 79b7dd114f
commit 9a0d5ae700
4 changed files with 5 additions and 5 deletions

View File

@@ -94,7 +94,7 @@ public class FollowerController : ApiController
{
if (!string.IsNullOrEmpty(nums))
{
var getDelItem = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s));
var getDelItem = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s)).ToList();
var prod = _db.followers.Where(q => getDelItem.Contains(q.num)).ToList();
if (prod.Count() > 0)

View File

@@ -89,7 +89,7 @@ public class accountingController : BaseApiController
{
if (!string.IsNullOrEmpty(nums))
{
var getDelItem = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s));
var getDelItem = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s)).ToList();
var prod = _db.accountings.Where(q => getDelItem.Contains(q.num)).ToList();
if (prod.Count() > 0)

View File

@@ -93,7 +93,7 @@ public class memberController : BaseApiController
{
if (!string.IsNullOrEmpty(nums))
{
var getDelItem = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s));
var getDelItem = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s)).ToList();
var prod = _db.members.Where(q => getDelItem.Contains(q.num)).ToList();
if (prod.Count() > 0)
@@ -135,7 +135,7 @@ public class memberController : BaseApiController
{
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.member_check.Where(q => ids.Contains(q.num)).ToList();
if (prod.Count() > 0)
{

View File

@@ -85,7 +85,7 @@ public class stockController : BaseApiController
{
if (!string.IsNullOrEmpty(nums))
{
var getDelItem = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s));
var getDelItem = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s)).ToList();
var prod = _db.stocks.Where(q => getDelItem.Contains(q.num)).ToList();
if (prod.Count() > 0)
{