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;
    }

希望对您有所帮助。