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

时间:2014-10-04 04:15:20

标签: c# asp.net-mvc list if-statement logic

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

  1. 如果他们已经担任这个角色,就什么都不做。
  2. 如果他们没有角色,请添加。
  3. 如果他们已经拥有该角色,但已取消选择,则将其删除。
  4. 我无法弄清楚第三个逻辑。我有一个现有角色的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语句的正确方向检查我是否需要删除数据库中的某个角色?

    谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

在此之后,从rolesToBeAdded添加角色并从rolesToBeDeleted中删除角色。

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