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}"); } }
给新手的额外优化建议
- 用ORM简化映射:手动逐列映射既繁琐又容易出错,推荐试试Dapper或Entity Framework Core这类ORM框架。比如用Dapper的话,一行代码就能完成查询+模型映射:
connection.Query<UserModel>("Select * from T_SVRS_Reg_Trans").ToList(),完全省去手动循环赋值的工作。 - 规范状态码使用:原来的
NoContent状态码不适合服务器异常场景,改用InternalServerError更符合HTTP规范,同时带上异常信息能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者sambit
相关产品推荐
相关产品推荐

