【问题标题】:Fastest way to add to a list elements not in second list添加到不在第二个列表中的列表元素的最快方法
【发布时间】:2017-03-09 08:42:04
【问题描述】:

我有 2 个以 BindingLists 作为数据源的列表框。这个想法是创建一个列表构建器(如MSDN 命名它),其中第一个 listBox 显示当前添加的列,第二个 listBox 显示其余可用列。第一个列表包含ViewColumn 对象,而另一个列表包含strings。
我将选定的列从数据库加载到第一个 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;
}

【问题讨论】:

    标签: c# winforms listbox listboxitems


    【解决方案1】:

    我认为你想做这样的事情:

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

    这应该会得到_allColumns 集合中的所有条目,不包括_viewColumns 集合中的条目。 我在这里假设_allColumns 包含可能列的全部集合。

    【讨论】:

    • 您在这里谈论的_allColumns 在我的示例中是detailsTable,但是它返回一个对象列表,其中ColumnName 只是众多属性之一,所以我也必须这样做:var temp1 = detailsTable.Select(d =&gt; d.ColumnName).ToList();。尽管如此,这解决了我的问题,谢谢!
    • 哦,是的。我有点误解了你的例子。但我很高兴我的回答对你有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    相关资源
    最近更新 更多