【问题标题】:Convert DataTable into list when no of column is dynamic当没有动态列时将 DataTable 转换为列表
【发布时间】:2018-06-29 11:00:50
【问题描述】:

我有一个数据表,其中没有动态列。我需要一个包含标题名称和值的列表。我发现了一个与此问题类似的问题。

enter link description here

但无法获得所需的输出。 使用此解决方案输出 在动态视图中:

在结果视图中

我正在使用此代码转换为动态对象:

    public static List<dynamic> ToDynamic(this DataTable dt)
    {
        var dynamicDt = new List<dynamic>();
        foreach (DataRow row in dt.Rows)
        {
            dynamic dyn = new ExpandoObject();
            foreach (DataColumn column in dt.Columns)
            {
                var dic = (IDictionary<string, object>)dyn;
                dic[column.ColumnName] = row[column];
            }
            dynamicDt.Add(dyn);
        }
        return dynamicDt;
    }

需要这样的输出:-

我怎样才能做到这一点?

【问题讨论】:

    标签: c# .net linq datatable


    【解决方案1】:

    您可以通过修改the ToDynamic method you are using 来实现。原来的方法是:

    public static class DataTableExtensions
    {
        public static List<dynamic> ToDynamic(this DataTable dt)
        {
            var dynamicDt = new List<dynamic>();
            foreach (DataRow row in dt.Rows)
            {
                dynamic dyn = new ExpandoObject();
                dynamicDt.Add(dyn);
                //--------- change from here
                foreach (DataColumn column in dt.Columns)
                {
                    var dic = (IDictionary<string, object>)dyn;
                    dic[column.ColumnName] = row[column];
                }
                //--------- change up to here
            }
            return dynamicDt;
        }
    }
    

    将“更改” cmets 之间的行替换为:

    foreach (var columnName in new[] {"A", "B", "C", "D", "E"} )
    {
        var dic = (IDictionary<string, object>)dyn;
        if(dt.Columns.Contains(columnName))
            dic[columnName] = row[dt.Columns[columnName]];
        else
            dic[columnName] = 0;
    }
    

    假设您需要列名 A 到 E,如果您需要更多列,请酌情调整。

    【讨论】:

    • 非常感谢您的回复,但我在这里得到了“{System.Dynamic.ExpandoObject}”的列表,但我需要一个包含所有标题名称的列表,其中的值就像我的输出图像一样,我不需要不想过滤列名,因为列名是动态的
    • 对不起,“这里”是什么意思?
    • 使用ToDynamic函数
    • 这很奇怪,会不会和你的调试环境有关?你一开始就用ToDynamic,对吧?
    猜你喜欢
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多