从IEnumerable中删除项的最佳方法是什么?
本文关键字:最佳 方法 是什么 删除 IEnumerable SelectListItem | 更新日期: 2023-09-27 18:16:34
我有一个asp.net-mvc网站,我正试图使用双列表框插件
我有一个数组
IEnumerable<SelectListItem> allItems:
我有一个整数数组
IEnumerable<int> selectedIds;
,表示某人所筛选的选定值。我的目标是看看给定这两个输入,是否可以创建两个IEnumerable
IEnumerable<SelectListItem> selectedItems;
IEnumerable<SelectListItem> nonSelectedItems;
,我将使用它来填充双列表框插件。我可以很容易地获得selectedItems,但当我尝试创建非选定列表时,我尝试使用Except(),但它似乎无法获取完整列表并"减去"所选列表中的任何项目。
我使用错误的方法来做这个过滤器吗?
您要找的是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)来使这些更快。只是要确保不要因协变而失去它