You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET遍历JobID数组查询数据库并返回结果到视图的实现问题

问题修复方案

你的代码存在三个核心问题:

  1. return View(req)写在循环体内,第一次循环执行到return就会直接终止方法,后续遍历逻辑完全不会执行
  2. 提前调用_context.Requisitions.ToList()会把整张表的数据都加载到内存再过滤,数据量较大时性能极差
  3. 循环条件写为i <= ids.Count(),会触发数组下标越界异常(数组下标从0开始,最大有效值为ids.Length - 1)

推荐最优写法

不需要手动遍历JobID数组,直接用LINQ的Contains方法完成批量筛选,EF会自动将该逻辑转换为SQL的IN语句,在数据库层面完成过滤,性能最优:

public ActionResult Index()
{
    string[] arr = GetAgentJobId();
    int[] ids = arr.Select(int.Parse).ToArray();

    // 筛选逻辑直接在数据库侧执行,无需加载全表数据
    var matchedRequisitions = _context.Requisitions
        .Where(r => r.Status == "Approved" && ids.Contains(r.JobID))
        .OrderByDescending(r => r.JobID)
        .ToList();
    
    return View(matchedRequisitions);
}

兼容循环写法(不推荐,仅做逻辑参考)

如果你需要保留手动循环的逻辑,可以在循环外声明结果集合,每次循环将匹配结果存入集合,循环结束后再统一返回:

public ActionResult Index()
{
    string[] arr = GetAgentJobId();
    int[] ids = arr.Select(int.Parse).ToArray();
    List<Requisition> Requisitions = _context.Requisitions.ToList();
    // 声明总结果集合存储所有匹配数据
    List<Requisition> matchedRequisitions = new List<Requisition>();

    // 修正循环条件避免下标越界
    for (int i = 0; i < ids.Length; i++)
    {
        var currentMatches = from r in Requisitions
                  orderby r.JobID descending
                  where r.Status == "Approved" && r.JobID == ids[i]
                  select r;
        // 将当前批次匹配结果加入总集合
        matchedRequisitions.AddRange(currentMatches);
    }

    return View(matchedRequisitions);
}

内容的提问来源于stack exchange,提问作者rrpqertyu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:42:03