我有一个asp.net-mvc网站,我正在尝试使用双列表框插件
我有一个
数组IEnumerable<SelectListItem> allItems:
我有一组Ints
IEnumerable<int> selectedIds;
表示有人过滤的选定值。我的目标是看看如果给出这两个imputs,我可以创建两个IEnumerable
IEnumerable<SelectListItem> selectedItems;
IEnumerable<SelectListItem> nonSelectedItems;
我会用来填充双列表框插件。我可以非常轻松地获取selectedItems,但是当我尝试创建未选择的List时,我尝试使用Except()但它似乎无法获取完整列表并“减去”所选列表中的任何项目。
我使用错误的方法来执行此过滤器吗?
答案 0 :(得分: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>
更改为HashSet<int>
,以便Contains()
变为O(1),从而加快这些速度。请确保不要covarinatly lose that。