私は自己参照されるクラスを持っています。 IdModuloPaiはその親を指すキーであり、ModulosFilhosはそのオブジェクトの子です。C#オブジェクトの位置を再帰的に取得
私はプロパティProfundidadeを持っていますが、再帰的にそのオブジェクトの深さを計算します。
もう1つの重要な特性はOrdemです。そのスコープ内でユーザーが定義した順序を保持します。
Id Nome IdModuloPai Ordem Profundidade OrdemGlobal
1 Root [NULL] 0 0 0
2 Users 1 0 1 1
3 Administration 2 0 2 2
4 Logs 2 1 2 3
5 Customers 1 0 1 4
6 Orders 5 0 2 5
この例の表を見てください。
Profundidadeに似た関数を作成しようとしています。その関数はグローバルな位置を計算しています。私は最後の列を取得しようとしていますOrdemGlobal。 OrdemGlobalによってオブジェクトを注文することができます。それは、必要なすべての地域で常に同じ方法で表示されます。この表に基づき
、正しい位置はどのように私は必要な動作をarchieveすることができ、管理がオルデン= 0を持っているとログがオルデン= 1
を持っているので、管理がログオンする前apperars
Root
+Users
+Administration
+Logs
+Customers
+Orders
見ているのですか?私のクラスの
コードは以下の
public class ModuloModel
{
public int Id { get; set; }
public string Nome { get; set; }
public int Ordem { get; set; }
public virtual int Profundidade {
get
{
return GetDepth(this);
}
}
public int? IdModuloPai { get; set; }
public virtual ModuloModel ModuloPai { get; set; }
public virtual ICollection<ModuloModel> ModulosFilhos { get; set; }
private int GetDepth(ModuloModel moduloModel)
{
if (moduloModel == null) return 0;
if (moduloModel.IdModuloPai == null) return 0;
return GetDepth(moduloModel.ModuloPai) + 1;
}
}
EDIT:改善された質問
私がしようと試みています
public virtual int OrdemGlobal
{
get
{
return GetGlobalOrder(this);
}
}
private int GetGlobalOrder(ModuloModel moduloModel)
{
if (moduloModel == null) return 0;
if (moduloModel.ModuloPai == null) return 0;
int smallerSiblings = moduloModel.ModuloPai.ModulosFilhos.Where(x => x.Ordem < moduloModel.Ordem).Count();
return (GetGlobalOrder(moduloModel.ModuloPai) + smallerSiblings + 1;
}
しかし、これは混乱している、と戻っていないような何か所望の情報。
GetGlobalOrderが返すものの例を挙げることができますか? –