C# 在C中开发组织层次结构时创建用户列表#
因此,我必须建立一个层次结构,管理员可以据此创建团队和子团队。可以有无限多个子团队,每个团队都必须有一个已经是其父团队成员的经理(但不是其父团队的经理) 我的问题是:如何创建一个用户列表供管理员选择(创建子团队时),用户既不是经理,也不是该子团队或父团队的成员? 我目前正在ASP.NET中使用Linq to SQL,我的数据库模式包含如下内容: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
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");
以下方法接收一个子团队,并:
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端不存在不合格的用户。很抱歉。我想得不够透彻。