DataSet ds = DAL.GetData();
DataSet dsInvitee = null;
DataTable dt = ds.Tables[0].Copy();
IEnumerable<DataRow> q1 = dt.AsEnumerable().Skip(5).Take(10);
dsInvitee = new DataSet();
DataTable dtNew = new DataTable();
dtNew.TableName = "DTInv";
dtNew = q1.CopyToDataTable<DataRow>();
dsInvitee.Tables.Add(dtNew.Copy());
dsInvitee.AcceptChanges();
dtNew = null;
dtNew = new DataTable();
dtNew.TableName = "DTTags";
dtNew = ds.Tables[1].Copy();
dsInvitee.Tables.Add(dtNew.Copy());
我在最后一行收到错误,因为“名为'Table1'的DataTable已经属于这个DataSet。”......请帮忙。
答案 0 :(得分:2)
您的问题是因为dtNew = q1.CopyToDataTable<DataRow>();
行,因为CopyToDataTable
扩展方法:
给定输入IEnumerable对象,其中泛型参数T为DataRow,返回包含DataRow对象副本的DataTable。
这意味着在调用CopyToDataTable之后,“DTInv”的表名会被吹走,dtNew
不再引用相同的DataTable
。在致电dtNew.TableName = "DTInv";
:
CopyToDataTable
移至
DataTable dtNew = new DataTable();
dtNew = q1.CopyToDataTable<DataRow>();
dtNew.TableName = "DTInv";
dsInvitee.Tables.Add(dtNew.Copy());
dsInvitee.AcceptChanges();
答案 1 :(得分:1)
我认为问题在于倒数第二行。您正在覆盖实例dtNew。到目前为止,您使用该实例执行的所有操作都将丢失,并且会从原始数据集中为其分配一个表,这是您要添加到最后一行中的数据集的内容...
答案 2 :(得分:1)
根据Daniel上面所说的,尝试交换
的顺序dtNew.TableName = "DTTags";
和
dtNew = ds.Tables[1].Copy();
围绕着。