Select 基于 child 元素条件的 XML 元素数组

Select Array of XML Elements based on child element condition

我有一些 XML 像下面的

<USTrades>
    <USTrade>
        <BalanceAmount>1000</BalanceAmount>
        <Narratives>
           <Narrative code="1" description="Code 1"/>
           <Narrative code="2" description="Code 2"/>
        </Narratives>
   </USTrade>
   <USTrade>
       <BalanceAmount>2000</BalanceAmount>
       <Narratives>
           <Narrative code="3" description="Code 3"/>
        </Narratives>
   </USTrade>
</USTrades>

我想 select 叙述代码不等于 3 的余额总和,所以我用这个 XML 得到的结果是 1000。下面的代码看起来是select 正确的叙述,但我不知道如何 select 基于 child 条件

的正确 parent
var trades = document.Descendants("USTrades").Descendants("Narratives").Descendants("Narrative").Where(n => (string)n.Attribute("code") != "3");

此查询产生了想要的结果:

var r = x.Elements("USTrades")
    .Elements("USTrade")
    .Where(e => e.Element("Narratives")
        .Elements("Narrative")
        .All(ee => ee.Attribute("code").Value != "3"))
    .Select(e => (int)e.Element("BalanceAmount"))
    .Sum();

我用下面的XML测试过它:

<USTrades>
    <USTrade>
        <BalanceAmount>1000</BalanceAmount>
        <Narratives>
           <Narrative code="1" description="Code 1"/>
           <Narrative code="2" description="Code 2"/>
        </Narratives>
   </USTrade>
   <USTrade>
       <BalanceAmount>2000</BalanceAmount>
       <Narratives>
           <Narrative code="3" description="Code 3"/>
        </Narratives>
   </USTrade>
   <USTrade>
       <BalanceAmount>3000</BalanceAmount>
       <Narratives>
           <Narrative code="4" description="Code 4"/>
        </Narratives>
   </USTrade>
</USTrades>

这里r4000,你原来的XML是1000