-3

我有一张带有 UserId 和 ManagerId 的表。编辑此表时,我需要确保如果 Jim 是 Jills 经理,而 Ron 是 Marks 经理,那么我不应该将 Mark 设置为 Jim 经理,因为它会创建无限循环。我想验证一个可以将 Manager 字段设置为 UserId 的表单。

4

1 回答 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 回答