0

asp.net-mvc Web サイトがあり、デュアル リストボックス プラグインを使用しようとしています。

私はの配列を持っています

IEnumerable<SelectListItem> allItems:

そして私はIntの配列を持っています

IEnumerable<int> selectedIds;

これは、誰かがフィルタリングした選択値を表します。私の目標は、これら 2 つの入力が与えられた場合に、2 つの 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に変更HashSet<int>してContains()O(1)にすることで、これらをはるかに高速化できます。共変的にそれを失わないようにしてください。

于 2013-06-02T18:08:30.927 に答える