C# 从同一LINQ查询中删除并返回xml块

C# 从同一LINQ查询中删除并返回xml块,c#,linq,linq-to-xml,C#,Linq,Linq To Xml,我有以下xml <Books> <Book> <Name>Let Us C</Name> <Price>250</Price> <ID>234</ID> </Book> <Book> <Name>Da Vinci Code</Name> <Pri

我有以下xml

<Books>
    <Book>
        <Name>Let Us C</Name>
        <Price>250</Price>
        <ID>234</ID>
    </Book>
    <Book>
        <Name>Da Vinci Code</Name>
        <Price>500</Price>
        <ID>38</ID>
    </Book>

    <Book>
        <Name>Data Structures through C++</Name>
        <Price>250</Price>
        <ID>234</ID>
    </Book>


</Books>
我需要删除具有给定IDsay 234的所有书籍,并且LINQ查询应将已删除书籍的ID和名称作为键值对返回给我。是否可以使用相同的LINQ查询来完成

我写了以下内容来删除ID为38的书。但是我无法在不需要再次迭代的情况下获取ID和名称

var idsToRemove  = new List<int>{{38}};
XDocument xmlDoc = XDocument.Load("sample.xml");

xmlDoc.Descendants("Book")
                .Where(
                    Book =>
                    (Book.Element("ID") != null
                    && idsToRemove.Contains(Convert.ToInt32((string) Book.Element("ID").Value)))).Select(Book => Book).Remove();
编辑1:

用于为给定图书Id选择键值对的代码

var result = xmlDoc.Descendants("Book")
                .Where(
                    Book =>
                    (Book.Element("ID") != null
                    && idsToRemove.Contains(Convert.ToInt32((string) Book.Element("ID").Value)))).Select(Book => new KeyValuePair<int,string>( Convert.ToInt32(Book.Element("ID").Value),(string)Book.Element("Name")));

如何使用单个LINQ查询合并这两个查询

为什么不保存查询结果并对该变量执行Remove

var booksToRemove =
    xmlDoc.Descendants("Book")
          .Where(Book =>
              (Book.Element("ID") != null && 
              idsToRemove.Contains(Convert.ToInt32((string)Book.Element("ID").Value))))
          .ToArray();

booksToRemove.Remove();

var removedBooks = booksToRemove.Select(x => new
                                        {
                                            ID = (string)x.Element("ID"), 
                                            Name = (string)x.Element("Name")
                                        }).ToArray();

在这种情况下,移除的图书将为我提供批量的IEnumerable。我只需要图书ID和名称的键值对。谢谢。但是书店搬走了;应该在结尾出现,否则removedBooks将返回null。@Rockstart:您确定,您尝试过吗?我会觉得很奇怪。-事实上,它没有发生,我只是测试了一下。@Rockstart不,不会的。节点将从文档的父节点分离,但仍将存在。