在 C# 中开发组织层次结构时创建用户列表

Creating list of users when developing an organisational hierarchy in C#

所以我必须建立一个层次结构,管理员可以在其中创建团队和子团队。可以有无限的子团队,每个团队必须有一个已经是其父团队成员的经理(但不是其父团队的经理)。

我的问题是:如何创建用户列表供管理员选择(在创建子团队时),用户既不是经理也不是任何成员那个子团队是父团队?

我目前正在 ASP.NET 中使用 Linq to SQL,我的数据库架构包含如下:Team - TeamUser - User

Team包含TeamId、TeamName、ParentTeamId、ManagerId等字段。 TeamUser由TeamId和UserId组成,User由UserId和姓名、联系方式等组成

目前我的代码看起来像这样将列表放入 SelectList

ViewBag.UserId = new SelectList(db.Users.Where(u => db.TeamUsers.Where(t => t.TeamId == id && t.UserId == u.UserId).Count() == 0), "UserId", "FirstName");

以下方法接收子团队并:

  1. 将经理标记为不合格,
  2. 向上遍历子团队的父级,将父级团队中的所有用户标记为不合格
  3. 然后 returns 未被标记为不合格的用户 ID 列表。

代码如下:

public static List<int> GetEligibleUsersForTeam(Team subTeam)
{
    List<int> ineligibleUsers = new List<int>();
    ineligibleUsers.Add(subTeam.ManagerId);
    Team parent = db.Teams.Find(subTeam.ParentTeamId);
    while (parent != null) {
        ineligibleUsers.AddRange(parent.Users.Select(x = x.Id).ToList());
        Team parent = db.Teams.Find(parent.ParentTeamId);
    }
    return db.Users.AsEnumerable().Where(x => ineligibleUsers.Contains(x.Id) == false).ToList();
}