c# - 当没有列是动态的时将 DataTable 转换为列表

标签 c# .net linq datatable

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

enter link description here

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

enter image description here

在结果 View 中 enter image 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;
    }

需要这样的输出:-

enter image description here

我怎样才能做到这一点?

最佳答案

您可以通过修改 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;
    }
}

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

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,如果您需要更多列,请适当调整。

关于c# - 当没有列是动态的时将 DataTable 转换为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51100226/

相关文章:

c# - 未引用的线程对象处置

C# 创建包含多个文件的 ZIP 存档

.net - 获取英语异常消息而不是本地语言

jquery - jqGrid 的 LINQ 搜索中的可为 Null 值

c# - 如何通过 Linq 展平类型(而非可枚举)?

c# - DatatemplateSelector,列表框拉伸(stretch)

c# - MSB0001 : Internal MSBuild Error: refCount should not be less than 1

c# - 使用异常消息属性检查特定错误是否是一种不好的做法?

mysql - 如何在不将 csv 保存到磁盘的情况下将 csv 格式的数据从内存发送到数据库?

c# Linq 查询与元组列表