我有以下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>
我需要删除所有具有给定 ID(比如 234)的书籍,并且 LINQ 查询应该将已删除书籍的 ID 和名称作为 keyValue 对返回给我。是否可以使用相同的 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 查询合并