C# LINQ到XML复杂查询过滤

C# LINQ到XML复杂查询过滤,c#,linq-to-xml,C#,Linq To Xml,我有这个基于微软文档的代码 输出是 <product name="p1"> <market name="m1"> <areacode>12345</areacode> <areacode>12346</areacode> </market> <market name="m2"> <areacode>12345</areacode> &

我有这个基于微软文档的代码

输出是

<product name="p1">
  <market name="m1">
    <areacode>12345</areacode>
    <areacode>12346</areacode>
  </market>
  <market name="m2">
    <areacode>12345</areacode>
    <areacode>13346</areacode>
  </market>
  <market name="m3">
    <areacode>12346</areacode>
    <areacode>13346</areacode>
  </market>
</product>

如何从输出中排除没有指定区号的市场?如果产品名称、市场名称和区号符合条件,则其余代码都需要

没有简单的方法可以创建一个新的树来满足您的需要,因为您无法直接筛选子级。但是,您可以修改树:

prods.Descendants("market").Where(m => m.Descendants("areacode").All(a => a.Value != "13346")).Remove();
prods.Descendants("product").Where(p => !p.Descendants("market").Any()).Remove();

谢谢这与我在处理xml的for循环中已经拥有的内容类似。我在这里的目的是学习和使用LINQ to XML。@workvact一般来说,LINQ用于查询以检索对象子集,而不是以某种方式修改对象,因此它不完全适合您所做的工作。
prods.Descendants("market").Where(m => m.Descendants("areacode").All(a => a.Value != "13346")).Remove();
prods.Descendants("product").Where(p => !p.Descendants("market").Any()).Remove();