在LINQ中使用DataGridViewRowCollection对象

时间:2010-04-15 20:14:52

标签: c# linq datagridview

我想使用扩展方法和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<>?同样的事情也适用于DataGridViewCellCollectionDataGridViewColumnCollection

PS。我正在使用.net framework 3.5

1 个答案:

答案 0 :(得分:37)

是的,这样做:

var rows = yourDataGridViewRowCollection
               .Cast<DataGridViewRow>()
               .Where(row => row.index > 4);

这使用Enumerable.Cast扩展方法:

  

Cast<TResult>(IEnumerable)方法   启用标准查询运算符   在非泛型上调用   通过提供必要的收集   类型信息。例如,   ArrayList未实施   IEnumerable<T>,但通过电话   Cast<TResult>(IEnumerable)   ArrayList对象,标准查询   然后可以使用运算符进行查询   顺序。