我正在尝试基于 DataSet 中的 DataRelations 构建一个 DataTables 列表,其中返回的表仅包含在它们之间的关系中,提前知道链的每一端。这样我的数据集就有 7 个表。关系如下所示:
Table1 -> Table2 -> Table3 -> Table4 -> Table5
-> Table6 -> Table7
所以给定Table1和Table7,我想返回表1、2、3、6、7
到目前为止,我的代码遍历所有关系并返回所有表,因此在示例中它也返回 Table4 和 Table5。我已经将第一个,最后一个作为参数传递了,并且知道我还没有使用最后一个,我仍在努力思考如何去做,这是我需要帮助的地方。
type DataItem =
| T of DataTable
| R of DataRelation list
let GetRelatedTables (first, last) =
let rec flat_rec dt acc =
match dt with
| T(dt) ->
let rels = [ for r in dt.ParentRelations do yield r ]
dt :: flat_rec(R(rels)) acc
| R(h::t) ->
flat_rec(R(t)) acc @ flat_rec(T(h.ParentTable)) acc
| R([]) -> []
flat_rec first []