使用 LINQ 展平分层数据集 - 但需要注意

2023-12-23

我有以下数据集,需要将其展平为列表:

<row itemID="828518871" locationID="60004165" typeID="9331" quantity="6" flag="4" singleton="0"/>
<row itemID="830476364" locationID="60004165" typeID="649" quantity="1" flag="4" singleton="1">
  <rowset name="contents" key="itemID" columns="itemID,typeID,quantity,flag,singleton">
    <row itemID="1139985051" typeID="6485" quantity="1" flag="22" singleton="1"/>
    <row itemID="1773489170" typeID="11489" quantity="1" flag="5" singleton="1">
      <rowset name="contents" key="itemID" columns="itemID,typeID,quantity,flag,singleton">
        <row itemID="1001694072954" typeID="16357" quantity="1" flag="0" singleton="0"/>
        <row itemID="1001694110421" typeID="16371" quantity="1" flag="0" singleton="0"/>
        ...
      </rowset>
    </row>
  </rowset>
  </row>

(...表示额外的行和/或嵌套级别;理论上这些级别可以无限嵌套。)

输出需要如下所示:

Item { ID = 828518871, Location = 60004165, Type = 9331, Quantity = 6, Flag = 4, Singleton = false }
Item { ID = 830476364, Location = 60004165, Type = 649, Quantity = 1, Flag = 4, Singleton = true }
Item { ID = 1139985051, Location = 60004165, Type = 6485, Quantity = 1, Flag = 22, Singleton = true }
Item { ID = 1773489170, Location = 60004165, Type = 11489, Quantity = 1, Flag = 5, Singleton = true }
Item { ID = 1001694072954, Location = 60004165, Type = 16357, Quantity = 1, Flag = 0, Singleton = false }
Item { ID = 1001694110421, Location = 60004165, Type = 16371, Quantity = 1, Flag = 0, Singleton = false }
...

问题是all输出中的行需要有它们的LocationID正确设置 - 子行必须从其父级或其父级的父级等获取此属性。

我已经编写了一个递归方法,可以正确生成所需的输出,但我希望仅使用 LINQ 获得相同的结果 - 这可能吗?


LINQ 通常不适合任意递归。用来压平就好了one嵌套层使用SelectMany,但递归解决方案最终仍需要显式调用自身。例如,您可以编写一个使用 LINQ 并在查询中调用自身的方法,但您无法轻松地使 LINQ 隐式执行递归。

因此,您也许可以调整现有的递归方法以使用 LINQ,但最终不太可能得到与解决方案完全不同的结构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 LINQ 展平分层数据集 - 但需要注意 的相关文章

随机推荐