从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(),但它似乎无法获取完整列表并"减去"所选列表中的任何项目。

我使用错误的方法来做这个过滤器吗?

从IEnumerable<SelectListItem>中删除项的最佳方法是什么?

您要找的是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)来使这些更快。只是要确保不要因协变而失去它