我想用linq过滤列表框项.但是我得到了一个错误

本文关键字:错误 一个 linq 过滤 列表 | 更新日期: 2023-09-27 18:16:38

这是我的代码Listbox1 =输入,Listbox2 =输出,Filter =我的过滤器文本框

    private void filter_TextChanged(object sender, EventArgs e)
    {
         listBox2.DataSource = from Name in listBox1.Items
             .Cast<String>()
             .ToList()
             where Name.StartsWith(Filter.Text)
             select Name;
    }

我想用linq过滤列表框项.但是我得到了一个错误

我不知道你的问题在哪里;但是,您有一个奇怪的LINQ查询语法和扩展方法语法的混合。而且,由于您在转换为列表后执行where子句,因此结果将是IEnumerable<string>

假设您的组合框项是字符串,我将这样做:

listBox2.DataSource = listBox1.Items
    .Cast<string>()
    .Where(s => s.StartsWith(Filter.Text))
    .ToList();

如果您的组合框包含其他,并且您想将这些对象插入到另一个列表框中:

listBox2.DataSource = listBox1.Items
    .Cast<SomethingElse>()
    .Where(x => x.Name.StartsWith(Filter.Text))
    .ToList();

或者如果您只想插入名称包含在这些对象中:

listBox2.DataSource = listBox1.Items
    .Cast<SomethingElse>()
    .Select(x => x.Name)
    .Where(n => n.StartsWith(Filter.Text))
    .ToList();

在我看来,LINQ查询语法在这里没有很大的帮助,只是增加了复杂性。这就是为什么我坚持使用扩展方法语法。

我不知道错误,但看看你的代码。我认为您缺少在ToList

中包装整个查询。
listBox2.DataSource = (from Name in listBox1.Items.Cast<String>() where Name.StartsWith(Filter.Text) select Name).ToList();
相关文章: