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();

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念