【问题标题】:Ensuring that items in one listbox does not appear in another listbox确保一个列表框中的项目不会出现在另一个列表框中
【发布时间】:2014-06-03 22:03:23
【问题描述】:

我的 MVC 视图中有两个列表框控件。第一个列表框显示可用用户,第二个列表框显示选定用户。我需要确保可用用户列表框不应包含所选列表框中的任何匹配用户。以下是我的控制器中创建 IEnumerable 集合以绑定到列表框的代码。

IEnumerable<SelectListItem> availableUsers = user.Where(c => c.CompanyId == subscription.CompanyId)
   .Select(c => new SelectListItem
   {
       Value = c.Id.ToString(),
       Text = c.FirstName + " " + c.Surname
   });


IEnumerable<SelectListItem> selectedUsers = subscription.Users
    .Select(c => new SelectListItem
    {
        Value = c.Id.ToString(),
        Text = c.FirstName + " " + c.Surname
    });

如上所述,我如何从选定用户集合中存在的可用用户集合中删除用户。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 listbox


    【解决方案1】:

    可能会根据用户是否存在于 selectedUsers 列表中来过滤 availableUsers 列表。像这样?

    var filteredAvailableUsers = availableUsers.Where(u => !selectedUsers.Any(s => s.Value == u.Value));
    

    可能有一种更有效的方法,但这是我脑海中浮现的想法。

    【讨论】:

    • 我做了一个假设,因为值是基于用户的 ID,所以它是唯一的。 (如果我正确理解代码示例,其中 c.Id 表示 c 指的是用户,而不是公司)。
    • 我真的不知道我在想什么,但你是绝对正确的。我猜看价值而不是 id 让我失望。我想收回我的 -1 但在你的答案被编辑之前不能。您的答案仍然可以通过执行availableUsers.Where(u =&gt; !selectedUsers.Any(s =&gt; u.Value == s.Value))availableUsers.Where(u =&gt; selectedUsers.All(s =&gt; s.Value != u.Value)) 之类的操作来改进。如果 OP 不必首先拉出不需要的用户而不是过滤掉它们,那也是最理想的。
    • @Smith.h.Neil,谢谢,我编辑了答案以使用 Any 而不是 FirstOrDefault。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多