在web api c#的对象列表中添加多个值

Posted

技术标签:

【中文标题】在web api c#的对象列表中添加多个值【英文标题】:adding multiple values in object list in web api c# 【发布时间】:2021-11-19 12:20:49 【问题描述】:

我是 web api 和 C# 的新手。我正在创建一个函数,我在其中调用具有 33 行的表中的值。查询是这样的:

Select * from T_SVRS_Reg_Trans

我创建了一个模型,我在其中放置了如下属性:

public class UserModel
    

        public int ID  get; set; 
        public string OrgUnit  get; set; 

        public string TDC  get; set; 

        public string CustCode  get; set; 

        public string CustName  get; set; 

        public string DestCode  get; set; 

        public string EMV  get; set; 

        public string Service  get; set; 

        public string SPCCode  get; set; 

        public string SPCode  get; set; 

        public string Remarks  get; set; 

        public int Stage  get; set; 

        public string Cost  get; set; 

        public string SAPUpdate  get; set; 

        public string Active  get; set; 

        public string CreatedBy  get; set; 

        public DateTime CreatedOn  get; set; 

        public string UpdatedBy  get; set; 

        public DateTime UpdatedOn  get; set; 

    

现在我正在调用表值以将其添加到这些属性中。我的功能是这样的:

[HttpPost]
        [Route("GetTableValue")]
        public IHttpActionResult GetTableValue()
        
            try
            
                UserModel objUserModel = new UserModel();


                ManageUserData ObjManageUserData = new ManageUserData();
                var sqlDataTable = ObjManageUserData.GetTableValue();

                if (sqlDataTable.Rows.Count > 0)
                

                    for (int i = 0; (i < sqlDataTable.Rows.Count); i++)
                    
                        objUserModel.OrgUnit=(sqlDataTable.Rows[i]["TRT_Org_ID"].ToString());
                        objUserModel.TDC = (sqlDataTable.Rows[i]["TRT_TDC_Code"].ToString());
                        objUserModel.CustCode = (sqlDataTable.Rows[i]["TRT_Cust_Code"].ToString());
                        objUserModel.CustName = (sqlDataTable.Rows[i]["TRT_Cust_Name"].ToString());
                        objUserModel.DestCode = (sqlDataTable.Rows[i]["TRT_Dest_Code"].ToString());
                        objUserModel.EMV = (sqlDataTable.Rows[i]["TRT_EMV"].ToString());
                        objUserModel.Service = (sqlDataTable.Rows[i]["TRT_Service"].ToString());
                        objUserModel.SPCCode = (sqlDataTable.Rows[i]["TRT_SPC_Code"].ToString());
                        objUserModel.SPCode = (sqlDataTable.Rows[i]["TRT_SP_Code"].ToString());
                        objUserModel.Remarks = (sqlDataTable.Rows[i]["TRT_Remarks"].ToString());
                        objUserModel.Stage = (int)(sqlDataTable.Rows[i]["TRT_Stage"]);
                        objUserModel.Cost = (sqlDataTable.Rows[i]["TRT_Cost_Imp"].ToString());
                        objUserModel.SAPUpdate = (sqlDataTable.Rows[i]["TRT_SAP_Update_Status"].ToString());
                        objUserModel.Active = (sqlDataTable.Rows[i]["TRT_IS_ACTIVE"].ToString());
                        objUserModel.CreatedBy = (sqlDataTable.Rows[i]["TRT_CREATED_BY"].ToString());
                        objUserModel.CreatedOn = (DateTime)(sqlDataTable.Rows[i]["TRT_CREATED_ON"]);
                        objUserModel.UpdatedBy = (sqlDataTable.Rows[i]["TRT_UPDATED_BY"].ToString());
                        objUserModel.UpdatedOn = (DateTime)(sqlDataTable.Rows[i]["TRT_UPDATED_ON"]);
                        
                    
                
                return Ok(objUserModel);


            

            catch (Exception ex)
            
                return Content(HttpStatusCode.NoContent, "Something went wrong");
            

但是我注意到只有最后一个表值被添加到模型中,其余部分没有。我想将模型形式的所有 33 个值添加到提到的模型中。有没有办法做到这一点?

请帮忙

【问题讨论】:

【参考方案1】:

您每次迭代都会覆盖objUserModel。在循环内创建一个new,将它们添加到List&lt;UserModel&gt;,然后将其返回到您的视图中。

还可以考虑删除古老的匈牙利符号(“obj”前缀)。还可以考虑使用 ORM,而不是使用字符串将列映射到属性。

【讨论】:

【参考方案2】:

您应该创建一个UserModel 类型的ListArray 并向其中添加项目

try

    List<UserModel> result = new List<UserModel>();
    ManageUserData ObjManageUserData = new ManageUserData();
    var sqlDataTable = ObjManageUserData.GetTableValue();

    if (sqlDataTable.Rows.Count > 0)
    

        for (int i = 0; (i < sqlDataTable.Rows.Count); i++)
        
            UserModel objUserModel = new UserModel();
            objUserModel.OrgUnit = (sqlDataTable.Rows[i]["TRT_Org_ID"].ToString());
            objUserModel.TDC = (sqlDataTable.Rows[i]["TRT_TDC_Code"].ToString());
            objUserModel.CustCode = (sqlDataTable.Rows[i]["TRT_Cust_Code"].ToString());
            objUserModel.CustName = (sqlDataTable.Rows[i]["TRT_Cust_Name"].ToString());
            objUserModel.DestCode = (sqlDataTable.Rows[i]["TRT_Dest_Code"].ToString());
            objUserModel.EMV = (sqlDataTable.Rows[i]["TRT_EMV"].ToString());
            objUserModel.Service = (sqlDataTable.Rows[i]["TRT_Service"].ToString());
            objUserModel.SPCCode = (sqlDataTable.Rows[i]["TRT_SPC_Code"].ToString());
            objUserModel.SPCode = (sqlDataTable.Rows[i]["TRT_SP_Code"].ToString());
            objUserModel.Remarks = (sqlDataTable.Rows[i]["TRT_Remarks"].ToString());
            objUserModel.Stage = (int)(sqlDataTable.Rows[i]["TRT_Stage"]);
            objUserModel.Cost = (sqlDataTable.Rows[i]["TRT_Cost_Imp"].ToString());
            objUserModel.SAPUpdate = (sqlDataTable.Rows[i]["TRT_SAP_Update_Status"].ToString());
            objUserModel.Active = (sqlDataTable.Rows[i]["TRT_IS_ACTIVE"].ToString());
            objUserModel.CreatedBy = (sqlDataTable.Rows[i]["TRT_CREATED_BY"].ToString());
            objUserModel.CreatedOn = (DateTime)(sqlDataTable.Rows[i]["TRT_CREATED_ON"]);
            objUserModel.UpdatedBy = (sqlDataTable.Rows[i]["TRT_UPDATED_BY"].ToString());
            objUserModel.UpdatedOn = (DateTime)(sqlDataTable.Rows[i]["TRT_UPDATED_ON"]);
            result.Add(objUserModel);
        
    
    return Ok(result);

catch (Exception ex)

    return Content(HttpStatusCode.NoContent, "Something went wrong");


【讨论】:

【参考方案3】:

您需要使用集合而不是单个对象 UserModel。

[HttpPost]
        [Route("GetTableValue")]
        public IHttpActionResult GetTableValue()
        
            try
            
                ManageUserData ObjManageUserData = new ManageUserData();
                var sqlDataTable = ObjManageUserData.GetTableValue();
                List<UserModel> userModels = new List<UserModel>();
                if (sqlDataTable.Rows.Count > 0)
                

                    for (int i = 0; (i < sqlDataTable.Rows.Count); i++)
                    
                        var objUserModel = new UserModel()
                        objUserModel.OrgUnit = (sqlDataTable.Rows[i]["TRT_Org_ID"].ToString());
                        objUserModel.TDC = (sqlDataTable.Rows[i]["TRT_TDC_Code"].ToString());
                        objUserModel.CustCode = (sqlDataTable.Rows[i]["TRT_Cust_Code"].ToString());
                        objUserModel.CustName = (sqlDataTable.Rows[i]["TRT_Cust_Name"].ToString());
                        objUserModel.DestCode = (sqlDataTable.Rows[i]["TRT_Dest_Code"].ToString());
                        objUserModel.EMV = (sqlDataTable.Rows[i]["TRT_EMV"].ToString());
                        objUserModel.Service = (sqlDataTable.Rows[i]["TRT_Service"].ToString());
                        objUserModel.SPCCode = (sqlDataTable.Rows[i]["TRT_SPC_Code"].ToString());
                        objUserModel.SPCode = (sqlDataTable.Rows[i]["TRT_SP_Code"].ToString());
                        objUserModel.Remarks = (sqlDataTable.Rows[i]["TRT_Remarks"].ToString());
                        objUserModel.Stage = (int)(sqlDataTable.Rows[i]["TRT_Stage"]);
                        objUserModel.Cost = (sqlDataTable.Rows[i]["TRT_Cost_Imp"].ToString());
                        objUserModel.SAPUpdate = (sqlDataTable.Rows[i]["TRT_SAP_Update_Status"].ToString());
                        objUserModel.Active = (sqlDataTable.Rows[i]["TRT_IS_ACTIVE"].ToString());
                        objUserModel.CreatedBy = (sqlDataTable.Rows[i]["TRT_CREATED_BY"].ToString());
                        objUserModel.CreatedOn = (DateTime)(sqlDataTable.Rows[i]["TRT_CREATED_ON"]);
                        objUserModel.UpdatedBy = (sqlDataTable.Rows[i]["TRT_UPDATED_BY"].ToString());
                        objUserModel.UpdatedOn = (DateTime)(sqlDataTable.Rows[i]["TRT_UPDATED_ON"]);
                        userModels.Add(userModels);

                    
                
                return Ok(userModels);


            

            catch (Exception ex)
            
                return Content(HttpStatusCode.NoContent, "Something went wrong");
            

        

【讨论】:

【参考方案4】:

由于您期望返回不止一行,因此您需要在将结果集迭代为某种集合/列表/数组时收集这些行。

试着列出你的UserModel

List<UserModel> objUserModels = new List<UserModel>();

然后在 for 循环的每次迭代之后将每个对象添加到列表中:

for (int i = 0; (i < sqlDataTable.Rows.Count); i++)

    var objUserModel = new UserModel();

    objUserModel.OrgUnit=(sqlDataTable.Rows[i]["TRT_Org_ID"].ToString());
    objUserModel.TDC = (sqlDataTable.Rows[i]["TRT_TDC_Code"].ToString());
    objUserModel.CustCode = (sqlDataTable.Rows[i]["TRT_Cust_Code"].ToString());
    objUserModel.CustName = (sqlDataTable.Rows[i]["TRT_Cust_Name"].ToString());
    objUserModel.DestCode = (sqlDataTable.Rows[i]["TRT_Dest_Code"].ToString());
    objUserModel.EMV = (sqlDataTable.Rows[i]["TRT_EMV"].ToString());
    objUserModel.Service = (sqlDataTable.Rows[i]["TRT_Service"].ToString());
    objUserModel.SPCCode = (sqlDataTable.Rows[i]["TRT_SPC_Code"].ToString());
    objUserModel.SPCode = (sqlDataTable.Rows[i]["TRT_SP_Code"].ToString());
    objUserModel.Remarks = (sqlDataTable.Rows[i]["TRT_Remarks"].ToString());
    objUserModel.Stage = (int)(sqlDataTable.Rows[i]["TRT_Stage"]);
    objUserModel.Cost = (sqlDataTable.Rows[i]["TRT_Cost_Imp"].ToString());
    objUserModel.SAPUpdate = (sqlDataTable.Rows[i]["TRT_SAP_Update_Status"].ToString());
    objUserModel.Active = (sqlDataTable.Rows[i]["TRT_IS_ACTIVE"].ToString());
    objUserModel.CreatedBy = (sqlDataTable.Rows[i]["TRT_CREATED_BY"].ToString());
    objUserModel.CreatedOn = (DateTime)(sqlDataTable.Rows[i]["TRT_CREATED_ON"]);
    objUserModel.UpdatedBy = (sqlDataTable.Rows[i]["TRT_UPDATED_BY"].ToString());
    objUserModel.UpdatedOn = (DateTime)(sqlDataTable.Rows[i]["TRT_UPDATED_ON"]);
    
    objUserModels.Add(objUserModel);
    

然后返回您的对象列表:

return Ok(objUserModels);

【讨论】:

以上是关于在web api c#的对象列表中添加多个值的主要内容,如果未能解决你的问题,请参考以下文章

C# 合并重复列表项并将它们的第二个值求和(2D 对象列表)

需要在列表中添加多个项目 - 决策表 - Drools

在 ASP.NET C# 中使用 jQuery 将多个参数传递给 Web 方法

在 Web 服务中返回列表时,只有在返回值时才会出现错误?

传递对象列表以获取 Web API 中的方法

如何在 C# EF 核心 web api 中将列表转换为 Json