Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我想用linq过滤列表框项目。但我犯了个错误_C#_Linq - Fatal编程技术网

C# 我想用linq过滤列表框项目。但我犯了个错误

C# 我想用linq过滤列表框项目。但我犯了个错误,c#,linq,C#,Linq,这是我的密码 Listbox1=输入,Listbox2=输出,Filter=我的过滤器文本框 private void filter_TextChanged(object sender, EventArgs e) { listBox2.DataSource = from Name in listBox1.Items .Cast<String>() .ToList() whe

这是我的密码 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;
    }
private void filter\u text已更改(对象发送方,事件参数e)
{
listBox2.DataSource=来自listBox1.Items中的名称
.Cast()
托利斯先生()
其中Name.StartsWith(Filter.Text)
选择名称;
}

我不知道错误,但正在查看您的代码。我认为您没有将整个查询包装在ToList中

listBox2.DataSource = (from Name in listBox1.Items.Cast<String>() where Name.StartsWith(Filter.Text) select Name).ToList();
listBox2.DataSource=(来自listBox1.Items.Cast()中的Name,其中Name.StartsWith(Filter.Text)选择Name.ToList();

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

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

listBox2.DataSource = listBox1.Items
    .Cast<string>()
    .Where(s => s.StartsWith(Filter.Text))
    .ToList();
listBox2.DataSource=listBox1.Items
.Cast()
.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()
.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();
listBox2.DataSource=listBox1.Items
.Cast()
.选择(x=>x.Name)
.Where(n=>n.StartsWith(Filter.Text))
.ToList();

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

会出现什么错误?请给出异常消息,而不是常规链接。该消息应显示特定信息。@OlivierJacot Descombes First ToList实际上不需要……Cast无论如何都将返回IEnumerable,它足以在Linq查询中使用。我也会更新它的答案。