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