加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

linq-to-xml – LINQ to XML GroupBy

发布时间:2020-12-16 05:35:39 所属栏目:百科 来源:网络整理
导读:我想使用LINQ将输入 XML转换为输出 XML,方法是在“Summary”字段上执行GROUPBY并将Balance字段向上扩展. 输入XML: Root Account SummaryChecking/Summary ComprehensiveInterest Checking Account/Comprehensive CurrencyDollar/Currency Balance10000000.0
我想使用LINQ将输入 XML转换为输出 XML,方法是在“Summary”字段上执行GROUPBY并将Balance字段向上扩展.

输入XML:

<Root>
  <Account>
    <Summary>Checking</Summary>
    <Comprehensive>Interest Checking Account</Comprehensive>
    <Currency>Dollar</Currency>
    <Balance>10000000.000000</Balance>
  </Account>
  <Account>
    <Summary>Savings</Summary>
    <Comprehensive>Market Account</Comprehensive>
    <Currency>Dollar</Currency>
    <Balance>20000000.000000</Balance>
  </Account>
  <Account>
    <Summary>Checking</Summary>
    <Comprehensive>Interest Checking Account</Comprehensive>
    <Currency>Dollar</Currency>
    <Balance>50000000.000000</Balance>
  </Account>  
</Root>

输出XML:

<Root>
  <Account>
    <Summary>Checking</Summary>
    <Comprehensive>Interest Checking Account</Comprehensive>
    <Currency>Dollar</Currency>
    <Balance>60000000.000000</Balance>
  </Account>
  <Account>
    <Summary>Savings</Summary>
    <Comprehensive>Market Account</Comprehensive>
    <Currency>Dollar</Currency>
    <Balance>20000000.000000</Balance>
  </Account>
</Root>

我试过这个,但无法获取节点/元素:

XElement groupData = new XElement("Root",chartData.Elements().GroupBy(x => x.Element("Summary").Value).
        Select(g => new XElement("Account",g.Key,g.Elements("Comprehensive"),g.Elements("Currency"),g.Sum(
                s =>
                (decimal)
                s.Element("Balance")))));

任何帮助,将不胜感激.提前致谢.

我建议将其投影到普通对象中,对它们进行分组,然后再投射回XML:
var data = from acct in chartData.Elements()
           select new {
               Summary = (string)acct.Element("Summary"),Comprehensive = (string)acct.Element("Comprehensive"),Currency = (string)acct.Element("Currency"),Balance = (decimal)acct.Element("Balance"),};

var grouped = from acct in data
              group acct by acct.Summary into g
              select new {
                  Summary = g.Key,Comprehensive = g.First().Comprehensive,Currency = g.First().Comprehensive,Balance = g.Sum(),};

var groupData = new XElement("Root",from g in grouped
     select new XElement("Account",new XElement("Summary",g.Summary),new XElement("Comprehensive",g.Comprehensive),new XElement("Currency",g.Currency),new XElement("Balance",g.Balance.ToString("0.000000"))
         )
     );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读