我有一個自引用的類。 IdModuloPai是指向其父項的關鍵,ModulosFilhos是該對象的子項。C#獲取對象的位置遞歸
我有一個屬性,Profundidade,遞歸計算該對象的深度。
另一個重要的屬性是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訂購對象,並且它在每個我需要的地方都會以相同的方式出現。基於此表
,正確位置是
Root
+Users
+Administration
+Logs
+Customers
+Orders
看,因爲政府有ORDEM = 0和日誌具有ORDEM = 1
我怎樣才能archieve所期望的行爲記錄在此之前,政府apperars?我班的
代碼如下
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;
}
}
編輯:改進問題
我tryed像
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返回的例子嗎? –