如何从数据流中获取列?

uza*_*y95 10 c# datatable datarowcollection

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

但是怎么样?

DataTable dt;
if (drs.Length>0)
{
    dt = new DataTable();

    foreach (DataRow row in drs)
    {
        dt.Columns.Add(row???????)
    }

    // If it possible, something like that => dt.Columns.AddRange(????????)

    for(int i = 0; i < drs.Length; i++)
    {
        dt.ImportRow(drs[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 17

假设行都具有相同的结构,最简单的选择是克隆旧表,省略数据:

DataTable dt = drs[0].Table.Clone();
Run Code Online (Sandbox Code Playgroud)

或者,类似于:

foreach(DataColumn col in drs[0].Table.Columns)
{
    dt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是.NET 3.5,可以使用DataTableExtensions.CopyToDataTable方法(DataRowCollection/IEnumerable <DataRow>的扩展名)吗? (2认同)

Sat*_*aga 5

如果您的 DataRows 来自其中定义了列的数据表,

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);  
}
Run Code Online (Sandbox Code Playgroud)

  • 这也很好。我更喜欢 AddRange 而不是 foreach。 (2认同)