0

親である同じテーブルを順番に参照するエンティティがあります。以下は、それをよりよく説明する表です。

| 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;
}

クラスレベルで宣言された変数を使用して、最終的な親を認識しています。後で使用されることのない変数「エンティティ」を返していますが、究極の親エンティティが使用されています。このアプローチは機能しますが、私はこれにあまり満足していません。どんな指示も役に立ちます。

4

1 に答える 1

1

私は C# にはあまり詳しくありませんが、再帰関数の一般的な構造がおかしいようです。

次の行に沿って何かを試してください。

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

ところで、これはデータセットに循環参照がないことに大きく依存します。

于 2013-09-17T16:47:38.127 に答える