2014-10-04 51 views
0

我希望能够通过MVC中的复选框列表编辑员工角色。如何检查列表中的值是否不在另一个IList中

  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语句来检查是否需要删除数据库中的角色?

谢谢!

+1

什么是vm以上? – ArunGeorge 2014-10-04 04:18:23

+0

vm是我使用的ViewModel,它包含ExistingRoles的IList – user2325484 2014-10-04 04:21:40

回答

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它处理它周围的业务逻辑。把所有这些都放在你的控制器和视图逻辑中会在以后保持这种状态时对你造成伤害。

相关问题