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

C# Web API中如何将数据表多行数据批量存入UserModel列表(新手求助)

嘿,问题很明显啦!你现在只创建了一个UserModel对象objUserModel,在循环遍历DataTable的每一行时,你不断覆盖这个对象的属性值,所以最后返回的自然只有最后一行的数据——前面32行的赋值全被覆盖掉了。

要批量返回所有数据,你需要用一个集合(比如List<UserModel>)来存储每一行对应的模型实例,具体修改步骤如下:

  • 初始化一个List<UserModel>类型的变量,用来装所有行的数据
  • 在循环内部,每遍历一行就新建一个UserModel对象,给它赋值当前行的属性
  • 把新建好的对象添加到集合里
  • 最后返回这个集合

修改后的完整接口代码

[HttpPost]
[Route("GetTableValue")]
public IHttpActionResult GetTableValue() {
    try {
        // 用List集合存储所有行的模型实例
        List<UserModel> userModels = new List<UserModel>();
        ManageUserData ObjManageUserData = new ManageUserData();
        var sqlDataTable = ObjManageUserData.GetTableValue();
        
        if (sqlDataTable.Rows.Count > 0) {
            // 用foreach遍历DataRow更简洁直观
            foreach (DataRow row in sqlDataTable.Rows) 
            {
                // 每次循环新建一个UserModel实例,避免覆盖之前的数据
                UserModel objUserModel = new UserModel(); 
                objUserModel.OrgUnit = row["TRT_Org_ID"].ToString();
                objUserModel.TDC = row["TRT_TDC_Code"].ToString();
                objUserModel.CustCode = row["TRT_Cust_Code"].ToString();
                objUserModel.CustName = row["TRT_Cust_Name"].ToString();
                objUserModel.DestCode = row["TRT_Dest_Code"].ToString();
                objUserModel.EMV = row["TRT_EMV"].ToString();
                objUserModel.Service = row["TRT_Service"].ToString();
                objUserModel.SPCCode = row["TRT_SPC_Code"].ToString();
                objUserModel.SPCode = row["TRT_SP_Code"].ToString();
                objUserModel.Remarks = row["TRT_Remarks"].ToString();
                objUserModel.Stage = (int)row["TRT_Stage"];
                objUserModel.Cost = row["TRT_Cost_Imp"].ToString();
                objUserModel.SAPUpdate = row["TRT_SAP_Update_Status"].ToString();
                objUserModel.Active = row["TRT_IS_ACTIVE"].ToString();
                objUserModel.CreatedBy = row["TRT_CREATED_BY"].ToString();
                objUserModel.CreatedOn = (DateTime)row["TRT_CREATED_ON"];
                objUserModel.UpdatedBy = row["TRT_UPDATED_BY"].ToString();
                objUserModel.UpdatedOn = (DateTime)row["TRT_UPDATED_ON"];
                
                // 将当前行的模型实例添加到集合中
                userModels.Add(objUserModel); 
            }
        }
        // 返回整个集合,包含所有33行数据
        return Ok(userModels); 
    } catch (Exception ex) {
        // 优化异常处理:返回具体错误信息,方便调试
        return Content(HttpStatusCode.InternalServerError, $"请求出错:{ex.Message}");
    }
}

给新手的额外优化建议

  1. 用ORM简化映射:手动逐列映射既繁琐又容易出错,推荐试试Dapper或Entity Framework Core这类ORM框架。比如用Dapper的话,一行代码就能完成查询+模型映射:connection.Query<UserModel>("Select * from T_SVRS_Reg_Trans").ToList(),完全省去手动循环赋值的工作。
  2. 规范状态码使用:原来的NoContent状态码不适合服务器异常场景,改用InternalServerError更符合HTTP规范,同时带上异常信息能帮你快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 03:03:11