2012-10-16 57 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

哈哈,没问题,在黑暗中拍摄一种镜头,但认为它可以帮助你一点 –