1

示例 XML:

<PTC_FareBreakdowns>
  <PTC_FareBreakdown>
    <PassengerTypeQuantity Code="ADT" Quantity="1" />
    <FareBasisCodes>
      <FareBasisCode>RGOSAVE</FareBasisCode>
    </FareBasisCodes>
    <PassengerFare>
      <BaseFare Amount="4400" CurrencyCode="INR" />
      <Taxes>
        <Tax Amount="233" CurrencyCode="INR" TaxCode="OC" TaxGroupCode="SF" TaxGroupName="Taxes &amp;amp; Fees" />
        <Tax Amount="218" CurrencyCode="INR" TaxCode="OC" TaxGroupCode="SF" TaxGroupName="Taxes &amp;amp; Fees" />
        <Tax Amount="3500" CurrencyCode="INR" TaxCode="YQ" TaxGroupCode="SF" TaxGroupName="Taxes &amp;amp; Fees" />
        <Tax Amount="440" CurrencyCode="INR" TaxCode="OC" TaxGroupCode="SF" TaxGroupName="Taxes &amp;amp; Fees" />
        <Tax Amount="173" CurrencyCode="INR" TaxCode="OC" TaxGroupCode="SF" TaxGroupName="Taxes &amp;amp; Fees" />
        <Tax Amount="0" TaxCode="B2BMarkup" />
      </Taxes>
      <TotalFare Amount="8964" CurrencyCode="INR" />
      <Markups>
        <Markup Amount="0.0000" CurrencyCode="INR" Description="0.0  for client - 26472" MarkupCode="DisplayMarkup" Type="M" />
        <Markup Amount="0" CurrencyCode="INR" Description="0.0 % on base fare  for client - " MarkupCode="DisplayMarkup" MarkupType="M" Type="M" />
        <Markup Amount="0" Description="0.0% on fule surcharge  3500.0for client" MarkupCode="DisplayMarkup" MarkupType="M" Type="M" />
      </Markups>
    </PassengerFare>
  </PTC_FareBreakdown>
</PTC_FareBreakdowns>

LINQ,到目前为止我已经尝试过,

  var Adult = from Main in xd.Descendants(ns + "PTC_FareBreakdown")
              from Sub1 in Main.Elements(ns + "PassengerTypeQuantity")
              where Sub1.Attribute("Code").Value == "ADT"
              from Sub2 in Main.Elements(ns + "PassengerFare").Elements(ns + "Taxes").Elements(ns + "Tax")
              where Sub2.Attribute("TaxCode").Value == "OC"
              select new
              {
                  OC = Sub2.Attributes("Amount").Sum(nd => Int32.Parse(nd.Value)),
              };

它返回值为 233,218,440 和 173。但它必须返回所有值的总和 [233+218+440+173=1064]。

如果您需要更多信息,请告诉我。

4

2 回答 2

1
 var query = xd.Descendants(ns + "PTC_FareBreakdown")
               .Elements(ns + "PassengerFare")
               .Elements(ns + "Taxes")
               .Elements(ns + "Tax")
               .Where(tax => (string)tax.Attribute("TaxCode") == "OC") 
               .Sum(tax => (int)tax.Attribute("Amount"));    

结果:1064

于 2012-12-18T11:00:15.540 回答
1

@lazyberenzovsky 使用 LINQ 关键字语法的回答:

var Adult = (
    from tax in xd.Descendants("PTC_FareBreakdown")
                   .Elements("PassengerFare")
                   .Elements("Taxes")
                   .Elements("Tax")
    where (string)tax.Attribute("TaxCode") == "OC"
    select (int)tax.Attribute("Amount")
).Sum();

当然,您可能只使用:

var Adult = (
    from tax in xd.Descendants("Tax")
    where (string)tax.Attribute("TaxCode") == "OC"
    select (int)tax.Attribute("Amount")
).Sum();

如果这是您在 XML 中唯一拥有Tax元素的地方。

于 2012-12-18T13:15:21.807 回答