-3

UserIdとManagerIdのテーブルがあります。このテーブルを編集するときは、ジムがジルマネージャーで、ロンがマークマネージャーである場合、マークをジムマネージャーとして設定できないようにする必要があります。これは、無限ループで作成されるためです。ManagerフィールドをUserIdに設定できるフォームを検証したいと思います。

4

1 に答える 1

4

そこに無限ループは見当たりません...ロンはマークスマネージャー、ジムはジルマネージャーです。MarkをJimsマネージャーとして設定すると、線形の管理ツリーが作成されます。ロン->マーク->ジム->ジル。再帰の必要はありません:-)

私はあなたが何を達成しようとしているのか理解していますが、より多くの情報があなたを助けるためのより良い洞察を与えるでしょう。これらの従業員はテーブルのクラスまたはエンティティですか?

私は、各従業員には1人のマネージャーしかいないと想定しています。したがって、従業員を別のマネージャーとして設定する場合は、線形ツリーを上に進んで、次のように有効かどうかを確認します。

//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;
}

Visual Studioでこれを試みたのではなく、ここに入力しました。タイプミスがある場合は、すみません。

于 2012-10-16T17:16:50.040 に答える