1

在表单中,我有两个列表框控件,这些控件用于将用户映射到角色。在左侧的列表框中(可用用户),我需要显示与当前部门关联的所有用户的列表。右侧的列表框显示部门中已映射到该角色的用户列表。 在此处输入图像描述

每个列表框都映射到它自己的集合。我想做的是在列表框最初加载时从可用用户集合中过滤掉可能出现在映射用户集合中的名称。在查看插图时,右侧的列表框应仅显示 1 个可映射到此角色的可用用户(在插图中它将是 alguser4)

我最初的想法是创建一个新集合(avaialbleuserscoll)并尝试使用 linq 进行过滤。我卡住的地方是一个用户可能被映射到多个角色,因此我不能采用当前的方法,只测试计数 = 0。我需要做的是测试以确保计数 == 0 或角色 ID 不等于当前角色 ID。

对于如何仅让未映射到当前角色的用户显示在 listAllUsers 列表框中的任何指导,我将不胜感激

 private void EditMappedUserDetails(int agencyid, int roleid)
    {
        List<SecurityUser> allUserColl;
        List<SecurityUser> mappedUserColl;
        List<SecurityUser> availableUserColl;
        allUserColl = AdminFactory.GetUsersAndRoles(agencyid).OrderByDescending(n => n.UserName).ToList();

        mappedUserColl = SelectedRoleData.FirstOrDefault().SecurityUserRoles.Select(r => r.SecurityUser).OrderByDescending(n => n.UserName).ToList();

        availableUserColl = allUserColl.Except(mappedUserColl).ToList();

        listAllUsers.DataTextField = "UserName";
        listAllUsers.DataValueField = "SecurityUserId";

        listMappedUsers.DataTextField = "UserName";
        listMappedUsers.DataValueField = "SecurityUserId";

        listAllUsers.DataSource = availableUserColl;
        listMappedUsers.DataSource = mappedUserColl;
        listAllUsers.DataBind();
        listMappedUsers.DataBind();
        editUserUpdatePanel.Update();
    }
4

1 回答 1

1

您可以在 linq 中使用 except 函数来删除重复项,这是一个示例

 var m = availableUserColl.Except(mappedUserColl).ToList();
于 2012-05-31T19:21:51.780 回答