在foreach或for循环中声明DataRow

时间:2015-03-05 07:01:43

标签: c# linq datatable datarow

情况就是这样。我有一个选择查询,它获取了我想要插入到新DataTable中的DataRows数组。

但是当尝试添加Row时,我收到以下错误:

" Row已经属于另一个表"。

所以我尝试在循环中创建并初始化一个新的DataRow(for和foreach循环),然后在初始化DataRow时抛出错误:

"由于其保护级别无法访问"

任何想法?感觉就像我错过了一些愚蠢的东西。

第一个错误的我的代码:

var DRCurrentAuspragung = _DTAuspragung.Select(@"MerkmalID = "+Convert.ToString(MerkmalID));

        _DTCurrentAuspragung = new DataTable();
        for (int i = 0; i < DRCurrentAuspragung.Length;i++ )
        {
            DataRow RowAdd = DRCurrentAuspragung[i];
            _DTCurrentAuspragung.Rows.Add(RowAdd);
        }

第二个错误:

var DRCurrentAuspragung = _DTAuspragung.Select(@"MerkmalID = "+Convert.ToString(MerkmalID));

        _DTCurrentAuspragung = new DataTable();
        foreach (DataRow dr in DRCurrentAuspragung)
        {
            DataRow RowAdd = new DataRow();
            RowAdd = dr;
            _DTCurrentAuspragung.Rows.Add(RowAdd);
        }

提前致谢。

2 个答案:

答案 0 :(得分:0)

此异常的原因是一个DataRow对象不能属于多个表。一种解决方案是在ImportRow方法的帮助下创建此行的副本:

  _DTCurrentAuspragung.ImportRow(RowAdd);

选择行后不要忘记使用Clone(),因为这两个表必须具有相同的结构:

DataTable _DTCurrentAuspragung = _DTAuspragung.Clone();

因此,结果是:

 var DRCurrentAuspragung = _DTAuspragung.Select(@"MerkmalID = " + Convert.ToString(MerkmalID));

 _DTCurrentAuspragung = _DTAuspragung.Clone();
 for (int i = 0; i < DRCurrentAuspragung.Length; i++ )
 {
         DataRow RowAdd = DRCurrentAuspragung[i];
         _DTCurrentAuspragung.ImportRow(RowAdd);
 }

答案 1 :(得分:0)

您可能想要使用ImportRow()方法。请记住,您要导入行的表必须与您要导入的行所属的表具有相同的结构(列名和类型)