我想使用扩展方法和lambda表达式在LINQ表达式中使用DataGridViewRowCollection
。遗憾的是,扩展方法适用于IEnumerable<T>
类型DataGridViewRowCollection
未实现的类型。有趣的是,我可以在这里使用类似SQL的语法LINQ:
IEnumerable<DataGridViewRow> lRows = from DataGridViewRow row in dgvGrid.Rows
select row;
这样做之后,我可以使用LINQ扩展方法:
foreach (DataGridViewRow lRow in lRows.Where(row => row.index > 4)) { ... }
有没有办法在不使用那么长的第一个声明的情况下将DataGridViewRowCollection
转换为IEnumerable<>
?同样的事情也适用于DataGridViewCellCollection
和DataGridViewColumnCollection
。
PS。我正在使用.net framework 3.5
答案 0 :(得分:37)
是的,这样做:
var rows = yourDataGridViewRowCollection
.Cast<DataGridViewRow>()
.Where(row => row.index > 4);
这使用Enumerable.Cast
扩展方法:
Cast<TResult>(IEnumerable)
方法 启用标准查询运算符 在非泛型上调用 通过提供必要的收集 类型信息。例如,ArrayList
未实施IEnumerable<T>
,但通过电话Cast<TResult>(IEnumerable)
ArrayList
对象,标准查询 然后可以使用运算符进行查询 顺序。