Можно ли построить объект из динамических данных? - PullRequest
3 голосов
/ 17 марта 2011

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

Я не хочу использовать объект DataRow в качестве типа.

Есть ли способсделать это?

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

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

public static class DataTableExtension
{
    public static IEnumerable<IEnumerable<KeyValuePair<string, object>>> Items(this DataTable table)
    {
        var columns = table.Columns.Cast<DataColumn>().Select(c => c.ColumnName);
        foreach (DataRow row in table.Rows)
        {
            yield return columns.Select(c => new KeyValuePair<string, object>(c, row[c]));

        }
    }
}

static void Main(string[] args)
    {
        DataTable table = new DataTable();
        table.Columns.Add("Last Name");
        table.Columns.Add("First Name");
        table.Rows.Add("Tim", "Taylor");
        table.Rows.Add("John", "Adams");
        foreach (var row in table.Items())
        {
            foreach (var col in row)
            {
                Console.WriteLine("{0}, {1}\t", col.Key, col.Value);
            }

            Console.WriteLine();
        }

        Console.ReadLine();
    }

Вывод выглядит так ...

Last Name, Tim
First Name, Taylor

Last Name, John
First Name, Adams
3 голосов
/ 17 марта 2011

Это уже перечислимо, зачем пытаться сделать его перечисляемым, когда оно уже есть:

// Results = DataSet
foreach (DataTable table in results.Tables)
{
    Console.WriteLine("Table: " + table.TableName);
    foreach (DataRow row in table.Rows)
    {
        Console.WriteLine("  Row");
        foreach (DataColumn column in table.Columns)
        {
            Console.WriteLine("    " + column.ColumnName + ": " +
                row[column]);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...