我有这样的代码:
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()));
}
在最后一行,我收到的错误是:
输入数组比此表中的列数长。
为什么?
稍后编辑/添加:
如何解决?
答案 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方法保留任何属性设置。