如何将列表传递到数据表网络核心



我正在构建一个接收json文本字符串的api,该字符串使用post方法将信息保存在数据库中,我使用存储过程来执行此过程,我正在使用一个列表,该列表为我带来了json信息,但是我需要将信息传递给数据表,以便可以将其作为参数上传到存储过程, 但我无法进行转换,也无法使用 foreach 遍历列表,因为它告诉我它不是一个不可数的元素。 json 文件的结构如下:

{
"varios":[{
"name":"David",
"cant":"291123",
"number":"205893",
},
{
"name":"pedro",
"cant":"295523",
"number":"206693",
},
{
"name":"maria",
"cant":"295523",
"number":"206693",
}
],
}

我根据这样的json参数构建了列表

public class cadena
{
public List<lista> vari { get; set; }

}
public class lista
{
public string name { get; set; }
public int cant { get; set; }
public int number { get; set; }
}

然后我通过以下方式构建我的控制器,其中格式是我以前格式化的列表

public async Task<IActionResult> Post([FromBody] cadena formato)
{
await _repository.Insert(formato);
return Ok();

}

现在我将列表信息带到另一个方法,我应该在其中执行存储过程,它建议我应该将我的列表传递给 datatable

public async Task Insert(cadena formatos)
{
using (SqlConnection sql = new SqlConnection(_connectionString))
{
//
DataTable dt = new DataTable();

using (SqlCommand cmd = new SqlCommand("sp_pruebatype", sql))
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@tipo", dt));
await sql.OpenAsync();
await cmd.ExecuteNonQueryAsync();
return;
}
}
}

我构建了数据表,但不知道如何将列表传递给我的数据表,然后将其作为参数发送到我的存储过程 感谢您的帮助

首先,我们需要扁平化 json,并使其每行列表都使用 selectmany

var result = cadena.SelectMany(x=>x.vari.select(v=> new {v.name,v.cant,v.number})).ToList();
//pass that query and to make datatable
DataTable dt = new DataTable();
// add  column with respective names
dt.Columns.Add("col_name", typeof(String))
dt.Columns.Add("col_cant", typeof(String))
dt.Columns.Add("col_number", typeof(int))
// pass the data into respective column and add to the datatable
foreach (var item in result)
{
DataRow dr = dt.NewRow();
dr["col_name"] = item.name;
dr["col_cant"] = item.cant;
dr["col_number"] = item.number;
dt.Rows.Add(dr);
}

通过这样做,您的数据表已准备就绪

让我知道这样做时是否遇到任何问题

最新更新