2012-10-16 65 views
-3

我有一個包含UserId和ManagerId的表。當編輯這張表時,如果Jim是Jills經理,而Ron是Marks經理,那麼我需要確保 ,那麼我不應該將Mark設置爲Jim經理,因爲它會在無限循環中創建。我想驗證可以將管理員字段設置爲UserId的表單。遞歸檢查員工是否是老闆的方法

+0

你使用什麼數據庫訪問技術(EF,DAO等)?另外,如果你所說的存在,它不會是無限的(吉爾 - >吉姆 - >馬克 - >羅恩)。我明白你在說什麼,這是一個簡單的遞歸方法。但是,您只列出了語言和UI類型,所以我不知道如何針對未知數據庫層編寫代碼。 –

+0

你到目前爲止嘗試過什麼?你能否將你寫的代碼加入到這一點,並顯示你遇到的具體問題? –

+0

不會不會Ron - Mark - Jim - Jill :(吉爾,吉姆,馬克或羅恩的經理會做到這一點雖然 –

回答

4

我沒有看到那裏的無限循環...... Ron是Marks的經理,Jim是Jills經理。如果您將Mark設置爲Jims經理,那麼您將擁有一個線性管理樹。羅恩 - > Mark-> Jim->吉爾。無需遞歸:-)

我明白你想完成什麼,但更多的信息會給你更好的見解來幫助你。這些員工是一個班級還是一個表格的實體?

我假設每個員工只會有一個經理。因此,設置僱員作爲另一個的經理時,進步了線性樹,看它是否將是有效的,就像這樣:

//Assume managerName is "Mark" and employeeName is "Jim", as in your example above 
public bool isManagerValid(string managerName, string employeeName) 
{ 
    bool valid = true; 
    var manager = getEmployee("Mark"); //The "to-be" manager of Jim 
    var employee= getEmployee("Jim"); 

    var currentManager = getEmployee(manager.Manager); //Get Marks manager 
    while(currentManager != null && valid) 
    { 
     if(currentManager == employee) 
     { 
      valid = false; //Some manager up the line from Mark is already Jim 
     } 
     else 
     { 
      //Get the next manager up 
      currentManager = getEmployee(currentManager.Manager); 
     } 
    } 
    return valid; 
} 

我沒有在視覺工作室嘗試此,鍵入它在這裏,因此,如果有任何錯字,請原諒我

+0

非常感謝你的回答。 –

+0

哈哈,沒問題,在黑暗中拍攝一種鏡頭,但認爲它可以幫助你一點 –