C# LINQ:在元素中添加子元素

C# LINQ:在元素中添加子元素,c#,linq,linq-to-xml,C#,Linq,Linq To Xml,我知道以前有很多类似的问题 比如说 但我不能解决一个简单的问题 这里有一个例子 int id = 1; var doc = new XDocument(new XDeclaration("1.0","utf-8","yes")); doc.Add(new XElement("root", new XAttribute("Version", "

我知道以前有很多类似的问题 比如说

但我不能解决一个简单的问题

这里有一个例子

        int id = 1;
        var doc = new XDocument(new XDeclaration("1.0","utf-8","yes"));
        doc.Add(new XElement("root", new XAttribute("Version", "1.1.0")));
        doc.Root.Add(new XElement("subroot", new XAttribute("ID", id)));
        Console.WriteLine(doc);
这将产生以下结果

在这里之前一切都好。 现在我想在subroot中添加新的子元素

这就是我尝试过的

        doc.Element("subroot").Add(new XElement("InsideSubroot"), new XAttribute("name","xyz"));
不过,这会引发异常,表示对象引用未设置为对象的实例

另一次尝试是

    doc.Elements("subroot").Single(x=> (int) x.Attribute("ID") == id).Add(new XElement("InsideSubroot"), new XAttribute("name","xyz"));
这表示找不到匹配的元素

有人能解释一下发生了什么以及我为什么会犯这些错误吗。
以及如何添加子元素。在我的例子中,在subroot元素内部

subroot
不是文档的直接子元素。您应该使用
子代

doc
    .Descendants("subroot")
    .Single(x => (int)x.Attribute("ID") == id)
    .Add(new XElement("InsideSubroot"), new XAttribute("name","xyz"));

subroot
不是文档的直接子级。您应该使用
子代

doc
    .Descendants("subroot")
    .Single(x => (int)x.Attribute("ID") == id)
    .Add(new XElement("InsideSubroot"), new XAttribute("name","xyz"));

那根呢<代码>doc.Root.Elements(…)?这有效吗?Document.Root.Element(“subroot”).Add(新的XElement(“InsideSubroot”)、新的XAttribute(“name”、“xyz”);那根呢<代码>doc.Root.Elements(…)?这有效吗?Document.Root.Element(“subroot”).Add(新的XElement(“InsideSubroot”)、新的XAttribute(“name”、“xyz”);