我有一个UserId和ManagerId的表。编辑此表时,我需要确保这一点 如果Jim是Jills的经理,而Ron是Marks的经理,那么我就不应该将Mark设为Jim经理,因为它会在infinate循环中创建。我想验证一个可以将Manager字段设置为UserId的表单。
答案 0 :(得分: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;
}
我没有在视觉工作室尝试这个,在这里输入,所以如果有任何拼写错误,请原谅我