如何比较两个集合之间的值,并仅使用asp.net在列表框中呈现不同的值

时间:2012-05-31 19:16:51

标签: asp.net linq

在表单中我有两个列表框控件,这些控件用于将用户映射到角色。在左侧的列表框(可用用户)中,我需要显示与当前部门关联的所有用户的列表。右侧的列表框显示部门中已映射到角色的用户列表。 enter image description here

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

我的初衷是创建一个新的集合(avaialbleuserscoll)并尝试使用linq进行过滤。我被卡住的地方是用户可能被映射到多个角色因此我不能采用当前的方法而只是测试一个count = 0.我需要做的是测试以确保计数是== 0或那个角色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();
    }

1 个答案:

答案 0 :(得分:1)

你可以使用linq中的except函数删除重复项这里是一个例子

 var m = availableUserColl.Except(mappedUserColl).ToList();