我有一张带有 UserId 和 ManagerId 的表。编辑此表时,我需要确保如果 Jim 是 Jills 经理,而 Ron 是 Marks 经理,那么我不应该将 Mark 设置为 Jim 经理,因为它会创建无限循环。我想验证一个可以将 Manager 字段设置为 UserId 的表单。
问问题
269 次
1 回答
4
我没有看到那里的无限循环... Ron 是 Marks 经理,Jim 是 Jills 经理。如果您将 Mark 设置为 Jims 经理,那么您将拥有一个线性管理树。罗恩->马克->吉姆->吉尔。不需要递归:-)
我了解您要完成的工作,但更多信息将为您提供更好的洞察力。这些员工是表的类还是实体?
我假设每个员工只有一个经理。因此,当将一个员工设置为另一个员工的经理时,向上推进线性树以查看它是否有效,如下所示:
//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;
}
我没有在视觉工作室尝试过,在这里输入,所以如果有任何错字,请见谅
于 2012-10-16T17:16:50.040 回答