Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以从动态数据表构建对象?_C#_Datatable - Fatal编程技术网

C# 是否可以从动态数据表构建对象?

C# 是否可以从动态数据表构建对象?,c#,datatable,C#,Datatable,我有一个动态生成的数据表,所以我不知道它包含多少列。我想构建一个IEnumerable对象,它包含每行中每个字段的columnname和值 我不想使用DataRow对象作为类型 有什么方法可以做到这一点吗?它已经可以枚举了,既然已经可以枚举了,为什么还要尝试让它可以枚举呢: // Results = DataSet foreach (DataTable table in results.Tables) { Console.WriteLine("Table: " + table.Table

我有一个动态生成的数据表,所以我不知道它包含多少列。我想构建一个IEnumerable对象,它包含每行中每个字段的columnname和值

我不想使用DataRow对象作为类型


有什么方法可以做到这一点吗?

它已经可以枚举了,既然已经可以枚举了,为什么还要尝试让它可以枚举呢:

// 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]);
        }
    }
}

因为我真的不明白你想要实现什么;或者更确切地说,你的最终目标是什么,我这样做是作为一个有趣的小练习。我使用了一种扩展方法;但也许有办法改进它

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

是的,我知道,但正如我所说,我不想使用DataRow作为类型。理想情况下,我希望创建一个List对象,但我不知道如何使用未知的列名。如果我是你,我会使用普通版本,或者使用List或其他什么。
Last Name, Tim
First Name, Taylor

Last Name, John
First Name, Adams