C# 移动xdocument中的节点

C# 移动xdocument中的节点,c#,.net,linq,linq-to-xml,C#,.net,Linq,Linq To Xml,我想通过属性找到一个节点并将其移动到底部 XNode node = doc.Root.Elements().Where(e => e.Attribute("id").Value == "123").FirstOrDefault(); if (node != null) { node.Root.Elements().Where(s => e.Attribute("id").Value == "123").Remove(); doc.Root.Add(node); }

我想通过属性找到一个节点并将其移动到底部

XNode node = doc.Root.Elements().Where(e => e.Attribute("id").Value == "123").FirstOrDefault();
if (node != null)
{
    node.Root.Elements().Where(s => e.Attribute("id").Value == "123").Remove();
    doc.Root.Add(node);
}
这并不总是有效的。在.Remove()行中,有时会出现nullReferenceException。所以我猜这意味着它在FirstOrDefault()上匹配并得到了一个节点,但是两行之后相同的linq查询没有匹配任何内容。不知道这怎么可能。我错过什么了吗?没有任何东西同时涉及这个文件或任何东西

请使用这个:


可能是重复的。我发现,有些节点的id属性不存在。这很公平,但我的问题比这个简单得多。我想将一个节点移动到同一父节点的底部。为什么我的代码不起作用?实际上,我所做的与此相同,只是我使用singleordefault()而不是single,然后检查空值大小写,因为在我的情况下,节点可能不存在
 var foos = (from xElem in xDoc.Root.Descendants("Foo")
                       where xElem.Attribute("id").Value == "2" || xElem.Attribute("id").Value == "3"
                       select xElem).ToList();

            var newParentElem = (from xElem in xDoc.Root.Descendants("SubSection")
                                where xElem.Attribute("id").Value == "C"
                                select xElem).Single();

            foreach(var xElem in foos)
            {
                xElem.Remove();
                newParentElem.Add(xElem);
            }