Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试从XML向datatable添加标识datacolumn时出现错误“无法添加嵌套关系”?_C#_.net_Datatable_System.data.datatable - Fatal编程技术网

C# 尝试从XML向datatable添加标识datacolumn时出现错误“无法添加嵌套关系”?

C# 尝试从XML向datatable添加标识datacolumn时出现错误“无法添加嵌套关系”?,c#,.net,datatable,system.data.datatable,C#,.net,Datatable,System.data.datatable,尝试将datacolumn添加到datatable时,出现以下错误:无法将嵌套关系或元素列添加到包含SimpleContent列的表中。当我第一次点击此代码mt.Columns.AddIdentityId,typeofint 奇怪的是,当我在前一个错误后在调试器中查看datatable时,列就在那里。当我点击继续时,错误是:名为'IdentityId'的列已属于此数据表。它似乎将其添加,然后生成错误 代码如下: XElement doc = XElement.Load(XmlFileName);

尝试将datacolumn添加到datatable时,出现以下错误:无法将嵌套关系或元素列添加到包含SimpleContent列的表中。当我第一次点击此代码mt.Columns.AddIdentityId,typeofint

奇怪的是,当我在前一个错误后在调试器中查看datatable时,列就在那里。当我点击继续时,错误是:名为'IdentityId'的列已属于此数据表。它似乎将其添加,然后生成错误

代码如下:

XElement doc = XElement.Load(XmlFileName);
string TextToFind = "Some Text";
IEnumerable<XElement> query1 = doc.Descendants("desc").Where(c => c.Value == TextToFind).Ancestors("re");
IEnumerable<XElement> query2 = query1.First().Parent.ElementsAfterSelf("ti");
string xml = query2.First().ToString();
stream = new StringReader(xml);
reader = new XmlTextReader(stream);
xmlDataset.ReadXml(reader);
DataTable mt = xmlDataset.Tables["mt"];
DataColumn dc = mt.Columns.Add("IdentityId", typeof(int));
dc.AutoIncrement = true;
dc.AutoIncrementSeed = 1;
dc.AutoIncrementStep = 1;

我知道这与datatable来自XML这一事实有关,我发现的少数解决方案更多地处理XML而不是datatable。XML无法更改。

由于没有帮助,我最终使用传统循环进行复制。我尝试使用“复制并关闭”,但始终收到相同的错误。MSDN能够指导我解决以下问题:

private DataTable ConvertToRegularDataTable(DataTable source)
{
    DataTable result = new DataTable();

    foreach (DataColumn c in source.Columns)
    {
        result.Columns.Add(c.ColumnName, typeof(string));
    }
    DataColumn dc = new DataColumn("ID"); // table.Columns.Add("IdentityId", typeof(int));
    dc.AutoIncrement = true;
    dc.AutoIncrementSeed = 1;
    dc.AutoIncrementStep = 1;
    result.Columns.Add(dc);

    foreach (DataRow dr in source.Rows) 
    {
        result.Rows.Add(dr.ItemArray);
    }
    return result;
}