我想用linq过滤列表框项目。但是我收到了一个错误

时间:2015-10-07 19:40:01

标签: c# linq

这是我的代码 Listbox1 = input,Listbox2 = output,Filter = my filter textbox

    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;
    }

2 个答案:

答案 0 :(得分:1)

我不确切地知道你的问题在哪里;但是,您有一种奇怪的LINQ查询语法和扩展方法语法。而且,由于您在转换为list后执行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查询语法在这里没有太大帮助,只会增加复杂性。这就是我坚持使用扩展方法语法的原因。

答案 1 :(得分:0)

我不知道错误,但看着你的代码。我认为你缺少将整个查询包装在ToList

listBox2.DataSource = (from Name in listBox1.Items.Cast<String>() where Name.StartsWith(Filter.Text) select Name).ToList();