Конвертировать DataTable в список, если столбец не является динамическим - PullRequest
0 голосов
/ 29 июня 2018

У меня есть таблица данных, в которой ни один из столбцов не является динамическим. Мне нужен список с именем и значением заголовка. Я нашел вопрос, похожий на этот вопрос.

введите описание ссылки здесь

Но не могу получить желаемый результат. Вывод с этим решением В динамическом просмотре:

enter image description here

В результате просмотра 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

Как мне этого добиться?

1 Ответ

0 голосов
/ 29 июня 2018

Этого можно добиться, изменив метод ToDynamic, который вы используете . Оригинальный метод:

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, при необходимости измените их, если вам нужно больше столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...