Подтвердить что ты не робот

Использование объекта 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

4b9b3361

Ответ 1

Да, сделайте следующее:

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

В этом случае используется метод Enumerable.Cast:

Метод Cast<TResult>(IEnumerable)включает стандартные операторы запроса для вызова на не общий коллекций путем предоставления необходимого тип информации. Например, ArrayList не реализует IEnumerable<T>, но позвонив Cast<TResult>(IEnumerable) на ArrayList объект, стандартный запрос операторы могут затем использоваться для запроса последовательность.