【问题标题】:How to check if value in list is not in another IList如何检查列表中的值是否不在另一个 IList 中
【发布时间】:2014-10-04 04:15:19
【问题描述】:

我希望能够通过 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 语句检查我是否需要删除数据库中的角色?

谢谢!

【问题讨论】:

  • vm 是我正在使用的 ViewModel,其中包含 ExistingRoles 的 IList

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


【解决方案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,该 dll处理围绕它的业务逻辑。将所有这些放在您的控制器和视图逻辑中会在以后维护它时伤害您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 2020-05-11
    • 2022-08-24
    • 2022-12-12
    • 2020-10-04
    • 1970-01-01
    相关资源
    最近更新 更多