【问题标题】:Self Reference Get All Linked Records Parent & Child自我参考 获取所有链接的记录 父母和孩子
【发布时间】:2015-12-15 17:21:18
【问题描述】:

我想使用实体框架从自引用表中选择所有相关记录。我没有具体的水平。它仅适用于所有相关记录 all child 和 all parent 。下面是一些示例数据。所以如果我将 ID 5 传递给我的函数,它应该给我 id 为 1,4,5,7,8 的记录。

5 是 ID 7 的父 ID,而 7 是 ID 8 的父 ID。同样, 5 的父 ID 为 1 , 1 也是 Id 4 的父 ID。

因此,我想以这种方式选择 Id 5 的所有上下记录。

数据源

Id  Name    ParentId
1   Test 1  NULL
2   Test 2  NULL
3   Test 3  NULL
4   Test 4  1
5   Test 5  1
6   Test 6  4
7   Test 7  5
8   Test 7  7

预期

1   Test 1  NULL
4   Test 4  1
5   Test 5  1
7   Test 7  5
8   Test 7  7

【问题讨论】:

  • 看看这个question。你需要一个递归查询,看起来 EF 不直接支持它
  • 我没有写任何可以用作基础的实体。我试图使用单独的循环读取上下记录,但在这里因为我没有任何级别,所以它需要某种递归。所以我的代码根本不起作用,并且 .你可以从头开始。
  • 从这里开始sqlfiddle.com/#!3/497b0/6。它不是一个完整的答案
  • 非常感谢。我也在尝试一些事情。那么我需要做两个单独的查询吗?一个用于下面的记录,一个用于上面的记录,并将它们推送到临时表中,然后从中选择删除重复的记录。
  • 我添加了一个名为 RootId 的新列来支持多个树层次结构族。从给定的 Id 现在我可以获取根 Id 并使用根 Id 加载完整的树。 sqlfiddle.com/#!3/9d931

标签: c# sql-server entity-framework


【解决方案1】:

我明白了。我们需要首先确定根节点,然后从根节点中找到链接的家谱。 我们可以编写一个 CTE 来查找根节点,或者我们可以添加一个新列来保留根节点 id 。 Sql Fiddle With Root Node

【讨论】:

    猜你喜欢
    • 2020-06-06
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 2021-07-04
    • 2021-12-02
    • 2019-05-02
    相关资源
    最近更新 更多