从DataTable.Select()向DataTable添加行 - 列数不匹配?

时间:2013-09-25 19:31:51

标签: c# datatable .net-4.5

我有这样的代码:

DataTable dtLevel1 = dtCategories.Clone();
DataTable dtLevel2 = dtCategories.Clone();

// i can workaround this with CopyToDataTable()
dtLevel1.Rows.Add(dtCategories.Select("id = 123")); // error


// but here similar situation, I cant use CopyToDataTable() method here
// because it will overwrite whole table in next loop run
foreach (DataRow dr in dtLevel1.Rows)
{
    dtLevel2.Rows.Add(dtCategories.Select("[pid] = " + dr["id"].ToString()));
}

在最后一行,我收到的错误是:

  

输入数组比此表中的列数长。

为什么?

稍后编辑/添加:

如何解决?

2 个答案:

答案 0 :(得分:1)

dtCategories.Select("id = 123")返回满足您选择条件的DataRow数组,例如5行。

获取object[]的dtLevel1.Rows.Add的重载实际上获取了一列列值,换句话说,它希望一行。你的代码弄乱了一行数组行。

答案 1 :(得分:1)

我会解决这个问题如下:

    foreach (var row in dtCategories.Select("id = 123"))
    {
        dtLevel1.ImportRow(row);
    }

问题是您正在尝试将行数组传递给Add()。 Add()需要单行或包含列的对象数组。您应该迭代返回的结果并使用ImportRow方法保留任何属性设置。