在c#中使用递归查找实体的最终父级

时间:2013-09-17 16:39:46

标签: asp.net c#-4.0 recursion parent-child

我有一个实体,它反过来引用同一个表,它是它的父。下面的表格更好地描述了它。

| ID | Source_ID |
+----+----------+
| 1  | null     |
| 2  | 1        |
| 3  | 1        |
| 4  | 2        |
| 5  | 4        |

现在,当我在ID = 5时,我需要获取其最终父级,即ID = 1.

我尝试编写如下函数:

<entity> ultimateparententity;
internal <entity> FetchParentComponentRecursive(<entity> entity)
 {
  if (component.ParentEntity!= null)
  {
     FetchParentComponentRecursive(entity.ParentEntity);
  }
  else
  {
     ultimateparententity = entity;
     return component;
  }
 return entity;
}

我正在使用在类级别声明的变量来了解最终的父级。我正在返回变量“实体”,后来从未使用过,但是终极实用性就是使用的。这种方法有效,但我对此并不满意。任何指示都会有所帮助。

1 个答案:

答案 0 :(得分:1)

我对C#不太熟悉,但递归函数的一般结构看起来很糟糕。

尝试以下方面的内容:

internal <entity> FetchParentComponentRecursive(<entity> entity)
{
  if (component.ParentEntity == null)
  {
     return component;
  }
  else
  {
     return FetchParentComponentRecursive(entity.ParentEntity);
  }
}

顺便说一句,这在很大程度上取决于数据集中没有循环引用。