微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 3个带linq的嵌套组

我正在尝试获得4个List深度列表集合,列表< List< List< List< int>>>>.从我的Xml看起来像

<root> 
    <Claim key="1" carrier="cara" zip="34343" pages="1"/>
    <Claim key="2" carrier="cara" zip="34343" pages="2"/>
    <Claim key="3" carrier="carB" zip="10505" pages="2"/>
    <Claim key="4" carrier="carB" zip="10505" pages="4"/> 
    <Claim key="5" carrier="carB" zip="10505" pages="4"/>
</root>

输出的结构应该是这样的

-all
   -1
       -34343
           -cara
                   -1

   -2
       -34343
           -cara
                   -2

       -10505
               -carB
                   -3
   -4
       -10505
           -carB
                    -4
                    -5

目标是首先根据节点属性按页数,然后按zip,然后按操作符对XML进行排序.然后,我需要遍历结果列表并按特定顺序处理每个声明.我无法获得3个嵌套组的语法.我已经完成了获得2个嵌套组,任何人都可以帮助我获得第三个.

到目前为止,这是我的代码.

var query = from claim in root.Elements("Claim")
                        group claim by claim.Attributes("Pages").First().Value into pageGroups
                        from zipGroups in
                            (from claim in pageGroups
                             group claim by int.Parse(claim.Attributes("CarrierZip").First().Value))
                        group zipGroups by pageGroups.Key;

解决方法:

如果没有别的,我相信这段代码会回答你的问题.必须处理四个嵌套列表是非常复杂的,如果您可以将解决方案重构为更简单的方法,您可能会发现您的代码将更容易维护.

var xml = @"<root>  
  <Claim key=""1"" carrier=""cara"" zip=""34343"" pages=""1""/> 
  <Claim key=""2"" carrier=""cara"" zip=""34343"" pages=""2""/> 
  <Claim key=""3"" carrier=""carB"" zip=""10505"" pages=""2""/> 
  <Claim key=""4"" carrier=""carB"" zip=""10505"" pages=""4""/>  
  <Claim key=""5"" carrier=""carB"" zip=""10505"" pages=""4""/>
</root>";

var xElement = XElement.Parse(xml);

var claims = xElement
  .Elements("Claim")
  .Select(
    x => new {
      Key = (Int32) x.Attribute("key"),
      Carrier = (String) x.Attribute("carrier"),
      Zip = (Int32) x.Attribute("zip"),
      Pages = (Int32) x.Attribute("pages")
    }
  );

var lists = claims
  .OrderBy(claim => claim.Pages)
  .GroupBy(claim => claim.Pages)
  .Select(pagesGroup => pagesGroup
    .OrderBy(claim => claim.Zip)
    .GroupBy(claim => claim.Zip)
    .Select(zipGroup => zipGroup
      .OrderBy(claim => claim.Carrier)
      .GroupBy(claim => claim.Carrier)
      .Select(carrierGroup => carrierGroup
        .OrderBy(claim => claim.Key)
        .Select(claim => claim.Key)
        .ToList()
      )
      .ToList()
    )
    .ToList()
  )
  .ToList();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。