DataTable 迭代给出不需要的数据
DataTable iteration gives unwanted data
我正在使用 SqlDataAdapter 遍历 DataTable 并将其存储在列表中。
这是我的代码。
public IEnumerable<DataRow> GetRecord()
{
var table = new DataTable();
using (var da = new SqlDataAdapter("SELECT * FROM mv_tbl", "ConnectionString"))
{
da.Fill(table);
List<DataRow> list = new List<DataRow>();
foreach (DataRow r in table.Rows)
{
list.Add(r);
}
return list;
}
}
这给了我一个包含不必要数据的结果。这是结果。
[{"RowError":"",
"RowState":2,
"Table":[{"mv_id":2,
"mv_name":"Up",
"mv_link":"link",
"user":"admin@gmail.com",
"db_tstamp":"2020-01-01T01:50:00"},
{"mv_id":3,
"mv_name":"8 Below",
"mv_link":"link",
"user":"admin@gmail.com",
"db_tstamp":"2020-01-01T02:49:00"}],
"ItemArray":[2,"Up","link","admin@gmail.com","2020-01-01T01:50:00"],
"HasErrors":false},
{"RowError":"",
"RowState":2,
"Table":[{"mv_id":2,
"mv_name":"Up",
"mv_link":"link",
"user":"admin@gmail.com",
"db_tstamp":"2020-01-01T01:50:00"},
{"mv_id":3,
"mv_name":"8 Below",
"mv_link":"link",
"user":"admin@gmail.com",
"db_tstamp":"2020-01-01T02:49:00"}],
"ItemArray":[3,"8 Below","link","admin@gmail.com","2020-01-01T02:49:00"],
"HasErrors":false}]
我的预期结果是。
[{"mv_id":2,
"mv_name":"Up",
"mv_link":"link",
"user":"admin@gmail.com",
"db_tstamp":"2020-01-01T01:50:00"},
{"mv_id":3,
"mv_name":"8 Below",
"mv_link":"link",
"user":"admin@gmail.com",
"db_tstamp":"2020-01-01T02:49:00"}]
这是数据库的截图。
我原来的问题在这里。
How can I return a list of rows of dynamic table?
我哪里弄错了?
您可以将 DataTable
转换为 Dictionary<string,object>
(EnumerableRowCollection<Dictionary<string,object>
)
的集合
var result = dt.AsEnumerable()
.Select(row => dt.Columns
.Cast<DataColumn>()
.ToDictionary(column => column.ColumnName,column => row[column]));
return result;
这也会从 Web API.
生成所需的 Json return
或者,您可以 return DataTable
本身或使用匿名类型或用户定义的集合 class。
我认为您正在尝试序列化您的列表(GetRecord
return 结果)。
但在序列化之前,您需要将数据表传递给下面的函数(在您的情况下,您正在 returning IEnumerable<DataRow>
,尝试传递数据表)并将其转换为列表。现在尝试序列化这个 List<dynamic>
.
public List<dynamic> ConvertToDynamic(DataTable dt)
{
var lstOfDynamic = new List<dynamic>();
foreach (DataRow row in dt.Rows)
{
dynamic dyn = new System.Dynamic.ExpandoObject();
foreach (DataColumn col in dt.Columns)
{
var dic = (IDictionary<string, object>)dyn;
dic[col.ColumnName] = row[col];
}
lstOfDynamic.Add(dyn);
}
return lstOfDynamic;
}
希望对您有所帮助。
我正在使用 SqlDataAdapter 遍历 DataTable 并将其存储在列表中。 这是我的代码。
public IEnumerable<DataRow> GetRecord()
{
var table = new DataTable();
using (var da = new SqlDataAdapter("SELECT * FROM mv_tbl", "ConnectionString"))
{
da.Fill(table);
List<DataRow> list = new List<DataRow>();
foreach (DataRow r in table.Rows)
{
list.Add(r);
}
return list;
}
}
这给了我一个包含不必要数据的结果。这是结果。
[{"RowError":"",
"RowState":2,
"Table":[{"mv_id":2,
"mv_name":"Up",
"mv_link":"link",
"user":"admin@gmail.com",
"db_tstamp":"2020-01-01T01:50:00"},
{"mv_id":3,
"mv_name":"8 Below",
"mv_link":"link",
"user":"admin@gmail.com",
"db_tstamp":"2020-01-01T02:49:00"}],
"ItemArray":[2,"Up","link","admin@gmail.com","2020-01-01T01:50:00"],
"HasErrors":false},
{"RowError":"",
"RowState":2,
"Table":[{"mv_id":2,
"mv_name":"Up",
"mv_link":"link",
"user":"admin@gmail.com",
"db_tstamp":"2020-01-01T01:50:00"},
{"mv_id":3,
"mv_name":"8 Below",
"mv_link":"link",
"user":"admin@gmail.com",
"db_tstamp":"2020-01-01T02:49:00"}],
"ItemArray":[3,"8 Below","link","admin@gmail.com","2020-01-01T02:49:00"],
"HasErrors":false}]
我的预期结果是。
[{"mv_id":2,
"mv_name":"Up",
"mv_link":"link",
"user":"admin@gmail.com",
"db_tstamp":"2020-01-01T01:50:00"},
{"mv_id":3,
"mv_name":"8 Below",
"mv_link":"link",
"user":"admin@gmail.com",
"db_tstamp":"2020-01-01T02:49:00"}]
这是数据库的截图。
我原来的问题在这里。
How can I return a list of rows of dynamic table?
我哪里弄错了?
您可以将 DataTable
转换为 Dictionary<string,object>
(EnumerableRowCollection<Dictionary<string,object>
)
var result = dt.AsEnumerable()
.Select(row => dt.Columns
.Cast<DataColumn>()
.ToDictionary(column => column.ColumnName,column => row[column]));
return result;
这也会从 Web API.
生成所需的 Json return或者,您可以 return DataTable
本身或使用匿名类型或用户定义的集合 class。
我认为您正在尝试序列化您的列表(GetRecord
return 结果)。
但在序列化之前,您需要将数据表传递给下面的函数(在您的情况下,您正在 returning IEnumerable<DataRow>
,尝试传递数据表)并将其转换为列表。现在尝试序列化这个 List<dynamic>
.
public List<dynamic> ConvertToDynamic(DataTable dt)
{
var lstOfDynamic = new List<dynamic>();
foreach (DataRow row in dt.Rows)
{
dynamic dyn = new System.Dynamic.ExpandoObject();
foreach (DataColumn col in dt.Columns)
{
var dic = (IDictionary<string, object>)dyn;
dic[col.ColumnName] = row[col];
}
lstOfDynamic.Add(dyn);
}
return lstOfDynamic;
}
希望对您有所帮助。