2014-10-04 56 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它處理它周圍的業務邏輯。把所有這些都放在你的控制器和視圖邏輯中會在以後保持這種狀態時對你造成傷害。

相關問題