添加到不在第二个列表中的列表元素的最快方法
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
包含可能列的整体集合。
我有 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
包含可能列的整体集合。