我需要一个数据库,该数据库从一个名为“用户”的表开始,该表需要自我引用本身,并且将具有非常深的相关对象图。它需要像下图的左侧(忽略右侧)。

enter image description here

我还需要向上和向下遍历此图,以计算百分比,总数等。换句话说,在某些情况下,我需要在整个图形上浏览整个图。

这是可能的,/或如何完成?可以在LINQ语句中直接完成遍历吗?例子?

编辑:我基本上是在尝试创建网络营销方案,并需要计算每个人的收入。

例子:

  1. 为了能够在特定用户下为每个用户的总销售量平衡(因此每个用户都会有某种收入)。
  2. 计算树木一定级别的佣金(例如,如果顶级人士下方有3个人,每个人每人以1美元的价格出售产品,而佣金为50%,则为$ 1.50。)
  3. 如果我在上面的图像(左侧)查询“ b”,我应该得到“ b,h,i,j,n,o”

希望这会有所帮助:S

有帮助吗?

解决方案

您不能以一种可以转化为单个SQL查询的方式(或它们的常数计数),而无法使用LINQ遍历整个树。您可以通过一个查询每个级别的查询或一个查询来完成,这仅限于特定的级别计数(但是,这种查询在许多级别上会变得很大)。

在T-SQL(我假设您正在使用MS SQL Server)中,您可以使用 递归公共表格表达. 。应该可以将其放入存储过程中,您可以使用LINQ来获取所需的信息。

总而言之,您的选择是:

  1. 不要使用linq,只有与递归CTE的SQL
  2. 在LINQ的存储过程中使用递归CTE
  3. 使用Linq,为每个级别创建一个查询
  4. 使用ugly linq查询限制到仅几个级别

其他提示

我知道这已经很晚了,但是如果您查看定向的图形算法,则可以绕过递归问题。查看这两篇文章:

http://www.sitepoint.com/hierarchical-data-database/

http://www.codeproject.com/articles/22824/a-model-to-prepresent-directed-caclic-graphs-dag-o

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top