2013-06-02 67 views
0

我有一個asp.net MVC的網站,我想使用雙列表框插件從IEnumerable <SelectListItem>中刪除項目的最佳方法是什麼?

我有

IEnumerable<SelectListItem> allItems: 

一個數組,我有個整數

IEnumerable<int> selectedIds; 
數組

表示某人過濾的選定值。我的目標是看是否給予這兩個imputs,我可以創建兩個IEnumerable的

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

,我會用它來填充雙列表框插件。我可以非常容易地得到selectedItems,但是當我嘗試創建非選擇列表時,我嘗試使用Except(),但它似乎無法獲取完整列表並「減去」選定列表中的任何項目。

我使用錯誤的方法來做這個過濾器嗎?

回答

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

相關問題