从相同的LINQ查询中删除并返回xml块
本文关键字:删除 返回 xml 查询 LINQ | 更新日期: 2023-09-27 18:08:55
我有以下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:
为给定的book 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();