C# 如何从数据行获取列?

C# 如何从数据行获取列?,c#,datatable,datarowcollection,C#,Datatable,Datarowcollection,我有一个行集合(DataRow[]行)。我想将所有行导入另一个DataTable(DataTable dt) 但是怎么做呢 代码 DataTable dt; 如果(drs.Length>0) { dt=新数据表(); foreach(drs中的数据行) { dt.Columns.Add(第行) } //如果可能的话,可以这样=>dt.Columns.AddRange(???) 对于(int i=0;i

我有一个行集合(DataRow[]行)。我想将所有行导入另一个DataTable(DataTable dt)

但是怎么做呢

代码
DataTable dt;
如果(drs.Length>0)
{
dt=新数据表();
foreach(drs中的数据行)
{
dt.Columns.Add(第行)
}
//如果可能的话,可以这样=>dt.Columns.AddRange(???)
对于(int i=0;i
假设所有行都具有相同的结构,最简单的方法是克隆旧表,忽略数据:

DataTable dt = drs[0].Table.Clone();
或者,类似于:

foreach(DataColumn col in drs[0].Table.Columns)
{
    dt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
}
怎么样

DataTable dt = new DataTable;
foreach(DataRow dr in drs)
{
    dt.ImportRow(dr);
}
注意:这仅在
drs
数据行集合时有效。分离的行(不在
DataRowCollection
中)被忽略


不要忘记调用AcceptChanges。

如果数据行来自定义了列的数据表

DataRow[] rows;

DataTable table = new DataTable();
var columns = rows[0].Table.Columns;

table.Columns.AddRange(columns.Cast<DataColumn>().ToArray());

foreach (var row in rows)
{
    table.Rows.Add(row.ItemArray);  
}
DataRow[]行;
DataTable=新的DataTable();
var columns=行[0]。Table.columns;
table.Columns.AddRange(Columns.Cast().ToArray());
foreach(行中的变量行)
{
table.Rows.Add(row.ItemArray);
}

谢谢你,马克。您很完美。如果您使用的是.NET 3.5,是否可以使用DataTableExtensions.CopyToDataTable方法(DataRowCollection/IEnumerable的扩展)?我已经做了快速检查,但没有添加任何列。。。因此,您得到的行没有任何值-不是特别有用。Re
DataRowCollection
-这没有任何区别。我的测试示例正在使用DataTable.Rows(DataRowCollection)中的一个附加行,但它根本不起作用。对不起,好的,我是凭记忆回答的,不是一个测试用例(很难从我的测试环境中来回找到,不要问)。我收回我的答案。这也很好。我喜欢AddRange而不是foreach。
DataRow[] rows;

DataTable table = new DataTable();
var columns = rows[0].Table.Columns;

table.Columns.AddRange(columns.Cast<DataColumn>().ToArray());

foreach (var row in rows)
{
    table.Rows.Add(row.ItemArray);  
}