c# - 使用 LINQ 展平分层数据集 - 有一个警告

标签 c# linq

我有以下数据集需要展平成一个列表:

<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 }
...

要注意的是,输出中的所有 行都需要正确设置它们的LocationID - 子行必须从其父行或父行的父行等处获取此属性.

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

最佳答案

LINQ 通常不适用于任意递归。使用 SelectMany 展平 一个 层嵌套很好,但递归解决方案最终仍需要显式调用自身。例如,您可以编写一个使用 LINQ 并在查询中调用自身的方法,但您不能轻易地让 LINQ 隐式执行递归。

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

关于c# - 使用 LINQ 展平分层数据集 - 有一个警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5858608/

相关文章:

javascript - 访问代码隐藏中的 javascript 变量

c# - 如何获取XmlNode的 "real"ChildNodes,忽略空白节点?

c# - Linq 查询返回保存每个传递对象的 max DateTime 属性的数据结构

c# - WPF TextBlock 绑定(bind)到字符串

c# - 数组值到列表框

c# - 使用 linq 进行分组和计数

asp.net-mvc - 在 LINQ 查询和 ASP.NET MVC 方面需要帮助?

c# - IQueryable 可选 OrderBy 与 PredicateBuilder 和 Entity Framework

c# - IObservable 收集当前流中的所有元素并执行批量操作

sql - 使用linq : What gets transferred?选择特定的列