在LINQ中使用DataGridViewRowCollection对象

Mas*_*gar 24 c# linq datagridview

我想DataGridViewRowCollection在LINQ表达式中使用扩展方法和lambda表达式.不幸的是,扩展方法是类型IEnumerable<T>,它DataGridViewRowCollection没有实现.有趣的是,我可以在这里使用类似SQL的语法LINQ:

IEnumerable<DataGridViewRow> lRows = from DataGridViewRow row in dgvGrid.Rows 
                                     select row;
Run Code Online (Sandbox Code Playgroud)

在这之后,我可以使用LINQ扩展方法:

foreach (DataGridViewRow lRow in lRows.Where(row => row.index > 4)) { ... }
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以将我转换DataGridViewRowCollection成一个IEnumerable<>没有使用那么长的第一个声明?同样的事情适用于DataGridViewCellCollectionDataGridViewColumnCollection.

PS.我正在使用.net framework 3.5

And*_*are 39

是的,这样做:

var rows = yourDataGridViewRowCollection
               .Cast<DataGridViewRow>()
               .Where(row => row.index > 4);
Run Code Online (Sandbox Code Playgroud)

这使用Enumerable.Cast扩展方法:

Cast<TResult>(IEnumerable)方法允许通过提供必要的类型信息在非泛型集合上调用标准查询运算符.例如, ArrayList 没有实现 IEnumerable<T>,但是通过调用 Cast<TResult>(IEnumerable)ArrayList对象,然后可以使用标准查询运算符来查询序列.

  • 为了记录,`OfType <TResult>()`也是一个可行的选择.唯一的区别是`OfType`将丢弃它无法转换的任何东西,而'Cast`将抛出异常. (4认同)