所以我必须构建一个层次结构,管理员可以创建团队和子团队。可以有无限的子团队,每个团队必须有一个已经是其父团队成员的经理(但不是其父团队的经理)。
我的问题是:如何创建用户列表供管理员选择(创建子团队时),用户既不是经理也不是任何子团队的成员家长团队?
我目前在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");
答案 0 :(得分:1)
以下方法接收子团队:
以下是代码:
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();
}