添加到不在第二个列表中的列表元素的最快方法

Fastest way to add to a list elements not in second list

我有 2 个以 BindingLists 作为数据源的列表框。这个想法是制作一个列表生成器(如 MSDN 命名的那样),其中第一个列表框显示当前添加的列,第二个列表框显示其余可用列。第一个列表包含 ViewColumn 个对象,而另一个列表包含 string 个对象。
我将选定的列从数据库加载到第一个 listBox 中,然后我想将其余可用列加载到第二个 listBox 中(列表本身来自数据库中的另一个地方)。考虑到列数没有限制,我想以最快的方式做到这一点——那会是什么?
下面是一些可视化的代码:

ViewTable _view;
BindingList<ViewColumn> _viewColumns = new BindingList<ViewColumn>();
BindingList<string> _detailsColumns = new BindingList<string>();

void CustomInitialize()
{
    _view = //get view and its columns

    _viewColumns = new BindingList<ViewColumn>(_view.Columns);
    listBox_CurrentColumns.DataSource = _viewColumns;
    listBox_CurrentColumns.DisplayMember = "Name";

    var detailsTable = //get the list of available columns
    foreach (var row in detailsTable)
    {
        //TODO: if _viewColumns does not contain this value, add it to _detailsColumns
            _detailsColumns.Add(row.ColumnName);
    }

    listBox_AvailableColumns.DataSource = _detailsColumns;
}

我想你想做这样的事情:

_detailsColumns = _allColumns.Except(_viewColumns.Select(c => c.Name))

这应该会为您提供 _allColumns 集合中的所有条目,但不包括 _viewColumns 集合中的条目。 我在这里假设 _allColumns 包含可能列的整体集合。