如何检查列表中的值是否不在另一个IList中

本文关键字:是否 IList 另一个 检查 列表 何检查 | 更新日期: 2023-09-27 18:25:28

我希望能够通过MVC中的复选框列表编辑员工角色。

  1. 如果他们已经有了这个角色,就什么都不要做
  2. 如果他们还没有该角色,请添加该角色
  3. 如果他们已经拥有该角色,但该角色已被取消选择,请将其删除

我搞不懂第三个的逻辑。我有一个现有角色的IList,以及一个设置为true的角色列表。

        for (int i = 0; i < selectedRoles.Count(); i++)
        {
            var employeeRole = new EmployeeRole
            {
                EmployeeID = vm.EmployeeID,
                RoleID= Int32.Parse(postedRoleIds[i])
            };
            if (vm.ExistingRoles.Contains(selectedRoles[i]))
            {
            }
            else
            {
                db.EmployeeRoles.Add(employeeRole);
            }

        }

有人能为我指出IF语句的正确方向,以检查我是否需要删除数据库中的角色吗?

谢谢!

如何检查列表中的值是否不在另一个IList中

为了简单起见,最好的方法是获得两个单独的列表-

要添加的角色,要删除的角色。所以逻辑应该是

   IList<Role> rolesToBeAdded = new List<Role>();
   IList<Role> rolesToBeDeleted = new List<Role>();
   foreach(Role role in existingRoles)
   {
       if(! selectedRoles.contains(role))
       rolesToBeDeleted.Add(role);
   }
   foreach(Role role in selectedRoles)
   {
       if(! existingRoles.contains(role))
       rolesToBeAdded.Add(role);
   }

在此之后,从角色中添加角色ToBeAdded和从角色中删除角色ToBeDeleted。

如果您在企业级解决方案中执行此操作,您可能希望避免直接在视图模型等之外执行操作。您可能希望提取现有和新选择的角色的列表,将它们传递给处理其周围业务逻辑的业务逻辑dll。将所有这些放在控制器和视图逻辑中会在以后维护时对您造成伤害。