我需要一个数据库,该数据库以一个名为“User”的表开头,该表需要 self 引用并包含一个非常深的相关对象图。它需要像下图的左侧(忽略右侧)。
我还需要向上和向下遍历此图以计算百分比、总数等。换句话说,在某些情况下我需要遍历整个图。
这是否可能和/或如何实现?是否可以直接在 LINQ 语句中进行遍历?例子?
编辑: 我基本上是在尝试创建一个网络营销场景,并且需要计算每个人的收入。
例子:
- 能够计算特定用户下每个用户的总销售额(因此每个用户都会有某种收入)。
- 计算树中特定层级的佣金(例如,如果顶层人员下面有 3 个人,每人以 1 美元的价格销售产品,而佣金为 50%,那么就有 1.50 美元。)
- 如果我在上图(左侧)中查询“B”,我应该得到“B,H,I,J,N,O”
希望对你有帮助:S
最佳答案
您不能仅使用 LINQ 以转换为单个 SQL 查询(或它们的常量计数)的方式遍历整个树。您可以对每个级别使用一个查询,也可以使用一个查询来完成此操作,该查询仅限于特定数量的级别(但这样的查询对于许多级别来说会变得非常大)。
在 T-SQL 中(我假设您使用的是 MS SQL Server),您可以使用 recursive common table expressions 执行此操作.应该可以将其放入一个存储过程中,您可以从 LINQ 使用该存储过程来获取您真正想要的信息。
总而言之,您的选择是:
- 不要使用 LINQ,只使用带有递归 CTE 的 SQL
- 在 LINQ 的存储过程中使用递归 CTE
- 使用 LINQ,为每个级别创建一个查询
- 使用仅限于几个级别的难看的 LINQ 查询
关于c# - Entity Framework 和自引用表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7304881/