0

我有一个 asp.net-mvc 网站,我正在尝试使用双列表框插件

我有一个数组

IEnumerable<SelectListItem> allItems:

我有一个整数数组

IEnumerable<int> selectedIds;

表示某人过滤的选定值。我的目标是看看如果给定这两个输入,我可以创建两个 IEnumerable

 IEnumerable<SelectListItem> selectedItems;
 IEnumerable<SelectListItem> nonSelectedItems;

我会用它来填充双列表框插件。我可以很容易地获得 selectedItems 但是当我尝试创建未选择的列表时,我尝试使用 except() 但它似乎无法获取完整列表并“减去”所选列表中的任何项目。

我是否使用错误的方法来执行此过滤器?

4

1 回答 1

2

您正在寻找Where()

allItems.Where(o => !selectedIds.Contains(int.Parse(o.Value)))

您可以使用以下方法一次计算两个子列表ToLookup

var lookup = allItems.ToLookup(o => selectedIds.Contains(int.Parse(o.Value)));
var selectedItems = lookup[true];

您可以通过将IEnumerable<int>a更改为O(1) 来加快速度。只要确保不要covarinatly 失去它HashSet<int>Contains()

于 2013-06-02T18:08:30.927 回答