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

C# 在C中开发组织层次结构时创建用户列表#,c#,asp.net,asp.net-mvc,linq,linq-to-sql,C#,Asp.net,Asp.net Mvc,Linq,Linq To Sql,因此,我必须建立一个层次结构,管理员可以据此创建团队和子团队。可以有无限多个子团队,每个团队都必须有一个已经是其父团队成员的经理(但不是其父团队的经理) 我的问题是:如何创建一个用户列表供管理员选择(创建子团队时),用户既不是经理,也不是该子团队或父团队的成员? 我目前正在ASP.NET中使用Linq to SQL,我的数据库模式包含如下内容:Team-TeamUser-User Team包含TeamId、TeamName、ParentTeamId和ManagerId等字段TeamUser由Te

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

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

我目前正在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");

以下方法接收一个子团队,并:

  • 标志着经理不合格
  • 向上遍历子团队的父团队,将父团队中的所有用户标记为不合格
  • 然后返回未标记为不合格的用户的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();
    }
    
    公共静态列表GetEligibleUsersForTeam(团队子团队)
    {
    List InqualifibleUsers=新列表();
    不合格的用户。添加(子团队。ManagerId);
    团队父项=db.Teams.Find(subTeam.ParentTeamId);
    while(父级!=null){
    InqualifibleUsers.AddRange(parent.Users.Select(x=x.Id).ToList());
    团队父级=db.Teams.Find(parent.ParentTeamId);
    }
    返回db.Users.AsEnumerable().Where(x=>InqualifibleUsers.Contains(x.Id)==false.ToList();
    }
    
    显然,我没有实体模型。希望我对模型的描述是合理准确的。此外,您可以根据需要调整以返回用户列表,而不是ID。您对模型的表示实际上是完美的,我现在来试一试。此外,如果您是根级别的团队,则ParentTeamId不为null,则可能会出现问题。有时在这些场景中,根级别节点将其父节点设置为自身。您可能需要进行相应的调整。我对返回语句有问题。我会回复你的。是的,现在我想到了你对上一次陈述有困难的事实,我明白了原因。改为这样试试:
    db.Users.Where(x=>InqualifibleUsers.Contains(x.Id)==false.ToList()。如果您有大量用户,那么这可能不是一个好的解决方案。您遇到的问题是,我编写的包含无法转换回SQL,因为SQL端不存在不合格的用户。很抱歉。我想得不够透彻。