1

フォーム内に2つのリストボックスコントロールがあり、これらのコントロールはユーザーをロールにマッピングするために使用されます。左側のリストボックス(利用可能なユーザー)内に、現在の部門に関連付けられているすべてのユーザーのリストを表示する必要があります。右側のリストボックスには、すでにロールにマップされている部門のユーザーのリストが表示されます。 ここに画像の説明を入力してください

各リストボックスは、独自のコレクションにマップされます。私がやりたいのは、リストボックスが最初にロードされたときに、マップされたユーザーコレクションに表示される可能性のある名前を利用可能なユーザーコレクションから除外することです。図を見ると、右側のリストボックスには、この役割にマッピングできる1人のユーザーのみが表示されているはずです(図ではalguser4になります)。

私の最初の考えは、新しいコレクション(avaialbleuserscoll)を作成し、linqを使用してフィルター処理を試みることでした。私が立ち往生しているのは、ユーザーが複数の役割にマップされている可能性があるため、現在のアプローチをとることができず、カウント=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 に答える