如何使用LINQ查找DataGridView行?

有没有办法使用LINQ样式查询来查找DataGridView行? 我试图找到绑定到特定对象的那个并突出显示它。

MyDatagrid.Rows.FirstOrDefault(r => r.DataBoundItem == myItem).Selected = true; 

错误1’System.Windows.Forms.DataGridViewRowCollection’不包含’FirstOrDefault’的定义,并且没有可以找到接受类型’System.Windows.Forms.DataGridViewRowCollection’的第一个参数的扩展方法’FirstOrDefault’(你错过了吗?使用指令或程序集引用?)

您需要转换为IEnumerable因为DataGridViewRowCollection只实现IEnumerable

 MyDatagrid.Rows .Cast() .FirstOrDefault(r => r.DataBoundItem == myItem).Selected = true; 

对于那些来这里寻找VB版本的人来说,Lee的答案转化为:

 MyDatagrid.Rows.Cast(Of DataGridViewRow)().FirstOrDefault(Function(r) r.DataBoundItem Is myItem).Selected = True 

此外,如果你像我一样,并且正在使用它从绑定的DataTable.DataRowDataGridView.DataSource = DataTable )中找到你的DataGridViewRow ,那么你可以像这样访问它:

 Dim MyDataRowSearch() As DataRow = MyDataTable.Select("SomeColumn = SomeValue") If MyDataRowSearch.Count = 1 Then MyDataGrid.Rows.Cast(Of DataGridViewRow)().FirstOrDefault(Function(r) DirectCast(r.DataBoundItem, DataRowView).Row Is MyDataRowSearch(0)).Selected = True End If 

这比循环遍历DataGridView寻找匹配值要高效得多。