Использование объекта DataGridViewRowCollection в LINQ
Я хотел бы использовать DataGridViewRowCollection
в выражении LINQ с использованием методов расширения и лямбда-выражений. К сожалению, методы расширения для типов IEnumerable<T>
, которые DataGridViewRowCollection
не реализует. Самое забавное, что я могу использовать LINQ здесь с синтаксисом типа SQL:
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
.
пс. Я использую .net framework 3.5
Ответы
Ответ 1
Да, сделайте следующее:
var rows = yourDataGridViewRowCollection
.Cast<DataGridViewRow>()
.Where(row => row.index > 4);
В этом случае используется метод Enumerable.Cast
:
Метод Cast<TResult>(IEnumerable)
включает стандартные операторы запроса для вызова на не общий коллекций путем предоставления необходимого тип информации. Например, ArrayList
не реализует IEnumerable<T>
, но позвонив Cast<TResult>(IEnumerable)
на ArrayList
объект, стандартный запрос операторы могут затем использоваться для запроса последовательность.