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

时间:2017-03-09 08:42:04

标签: c# winforms listbox listboxitems

我有2个带有BindingLists的listBox,作为它们的数据源。我们的想法是创建一个List构建器(以MSDN命名),其中第一个listBox显示当前添加的列,第二个listBox显示其余可用列。第一个列表包含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;
}

1 个答案:

答案 0 :(得分:1)

我想你想做点什么:

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

这应该可以获取_allColumns集合中的所有条目,但不包括_viewColumns集合中的条目。 我假设_allColumns包含可能列的整体集合。