C# 如何将列表传递到datatable net core
我正在构建一个接收json文本字符串的api,该字符串使用post方法将信息保存在数据库中,我使用一个存储过程来执行此过程,我使用一个列表来获取json信息,但我需要将信息传递给datatable,以便将其作为参数上载到存储过程,但我无法进行转换,也无法使用foreach遍历列表,因为它告诉我它不是一个不可数元素。 json文件的结构如下所示:C# 如何将列表传递到datatable net core,c#,asp.net-core,.net-core,asp.net-core-webapi,C#,Asp.net Core,.net Core,Asp.net Core Webapi,我正在构建一个接收json文本字符串的api,该字符串使用post方法将信息保存在数据库中,我使用一个存储过程来执行此过程,我使用一个列表来获取json信息,但我需要将信息传递给datatable,以便将其作为参数上载到存储过程,但我无法进行转换,也无法使用foreach遍历列表,因为它告诉我它不是一个不可数元素。 json文件的结构如下所示: { "varios":[{ "name":"David", "cant":"291123", "number":"2
{
"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; }
}
我构建了datatable,但不知道如何将列表传递到datatable,然后将其作为参数发送到存储过程
感谢您的帮助首先,我们需要将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);
}
这样,您的数据表就准备好了
如果在执行此操作时遇到任何问题,请告诉我我认为您在哪里使用IEMunable应该通过foreach方法传递值。您还应该显示您编写的存储过程。我想最好只通过三个参数传递值。如果您使用的是microsoft sql server,并且希望传入一个
数据表
对象,那么您需要创建一个用户定义的表类型
,它与要传入的数据表
的结构相匹配。你还得做很多其他的事情。您是否为数据表定义了用户定义的表类型?
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;
}
}
}
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);
}