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

时间:2015-05-11 18:38:52

标签: c# asp.net asp.net-mvc linq linq-to-sql

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

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

我目前在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 个答案:

答案 0 :(得分:1)

以下方法接收子团队:

  1. 标记经理不合格,
  2. 遍历子团队的父母,将父团队中的所有用户标记为不合格
  3. 然后返回未被标记为不合格的用户ID列表。
  4. 以下是代码:

    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();
    }