C# 使用linq搜索绑定到数据表的CheckedListBox

C# 使用linq搜索绑定到数据表的CheckedListBox,c#,linq,C#,Linq,我有一个CheckedListBox(winforms),其中包含绑定到datatable的数据: clbCustomer.DataSource = ds.Tables["Default"]; clbCustomer.DisplayMember = "desc"; clbCustomer.ValueMember = "customerId"; 现在,我想在checkedlistbox中搜索特定的客户id,然后选择该行。我可以用foreach语句来实现这一点,如下所示: // Find the

我有一个CheckedListBox(winforms),其中包含绑定到datatable的数据:

clbCustomer.DataSource = ds.Tables["Default"];
clbCustomer.DisplayMember = "desc";
clbCustomer.ValueMember = "customerId";
现在,我想在checkedlistbox中搜索特定的客户id,然后选择该行。我可以用foreach语句来实现这一点,如下所示:

// Find the index
int index = 0;
foreach (DataRowView item in clbCustomer.Items)
{
    int cusId = Convert.ToInt32(item["customerId"]);
    if (cusId == 255)
    {
        break;
    }
    index++;
}
// Select the customer
clbCustomer.SetItemChecked(index, true);
然而,这样做似乎非常笨重。我正在尝试将上述代码转换为linq,但未能完成。以下是我到目前为止的情况:

// Find the index (not working)
int index = clbCustomer.Items.Cast<DataRowView>().Where(x => x["customerId"] == 255);
// Select the customer
clbCustomer.SetItemChecked(index, true);
//查找索引(不工作)
int index=clbCustomer.Items.Cast(),其中(x=>x[“customerId”]==255);
//选择客户
clbCustomer.SetItemChecked(索引,true);
但不确定如何使用linq提取该客户id的索引。任何帮助都将不胜感激。谢谢

Keithin8a提供的解决方案如下:

var item = clbCustomer.Items.Cast<DataRowView>().Where(x => Convert.ToInt32(x["customerId"]) == 255).FirstOrDefault();

int index = clbCustomer.Items.IndexOf(item);
var item=clbCustomer.Items.Cast().Where(x=>Convert.ToInt32(x[“customerId”])==255.FirstOrDefault();
int index=CLB客户.Items.IndexOf(item);

像这样的Linq语句返回注释中提到的集合。如果你要用

var item = clbCustomer.Items.Cast<DataRowView>().Where(x => Convert.ToInt32(x["customerId"]) == 255).FirstOrDefault()

这应该可以满足您的需要。

像这样的Linq语句会返回注释中提到的集合。如果你要用

var item = clbCustomer.Items.Cast<DataRowView>().Where(x => Convert.ToInt32(x["customerId"]) == 255).FirstOrDefault()

这应该可以满足您的需要。

这行是否-int index=clbCustomer.Items.Cast()。其中(x=>x[“customerId”]==255);可以编译吗?这里返回的结果似乎是一个集合。也许你可以用AddFirstOrDefault来修复它?如果我错了,请纠正我。谢谢。不,那条线根本不起作用。这就是我不确定如何修复的问题。var index=clbCustomer.Items.Cast()。其中(x=>x[“customerId”]==255)。FirstOrDefaut();clbCustomer.SetItemChecked(index.customerId,true);可能会有帮助=)@Маааааааааааааааааааааааааа;可以编译吗?这里返回的结果似乎是一个集合。也许你可以用AddFirstOrDefault来修复它?如果我错了,请纠正我。谢谢。不,那条线根本不起作用。这就是我不确定如何修复的问题。var index=clbCustomer.Items.Cast()。其中(x=>x[“customerId”]==255)。FirstOrDefaut();clbCustomer.SetItemChecked(index.customerId,true);可能会有帮助=)@Маааааааааааааааааааааааа!如果您想更新您的答案,只需做一个调整:var item=clbCustomer.Items.Cast().Where(x=>Convert.ToInt32(x[“customerId]”))==255.FirstOrDefault()@RobertSmith现在更新我的答案,很高兴你发现它很有用:)@Паааааааааааааааа107。在这个行业里,犯错误是最好的学习方式。看起来答案=)我在答案中遗漏了一些要求你发现了它们=)基思干得好就是这样!如果您想更新您的答案,只需做一个调整:var item=clbCustomer.Items.Cast().Where(x=>Convert.ToInt32(x[“customerId]”))==255.FirstOrDefault()@RobertSmith现在更新我的答案,很高兴你发现它很有用:)@Паааааааааааааааа107。在这个行业,犯错误是最好的学习方式。