I'd like to use a DataGridViewRowCollection
in a LINQ expression using extension methods and lambda expressions. Unfortunately, the extension methods are for types IEnumerable<T>
, which DataGridViewRowCollection
doesn't implement. The funny thing is, I can use LINQ here with the SQL-like syntax:
IEnumerable<DataGridViewRow> lRows = from DataGridViewRow row in dgvGrid.Rows
select row;
After doing that, I can use LINQ extension methods:
foreach (DataGridViewRow lRow in lRows.Where(row => row.index > 4)) { ... }
Is there any way I can convert my DataGridViewRowCollection
to an IEnumerab开发者_运维技巧le<>
without using that long first statement? The same thing applies to DataGridViewCellCollection
and DataGridViewColumnCollection
.
ps. I'm using .net framework 3.5
Yes, do this:
var rows = yourDataGridViewRowCollection
.Cast<DataGridViewRow>()
.Where(row => row.index > 4);
This uses the Enumerable.Cast
extension method:
The
Cast<TResult>(IEnumerable)
method enables the standard query operators to be invoked on non-generic collections by supplying the necessary type information. For example,ArrayList
does not implementIEnumerable<T>
, but by callingCast<TResult>(IEnumerable)
on theArrayList
object, the standard query operators can then be used to query the sequence.
精彩评论