Использование объекта DataGridViewRowCollection в LINQ - PullRequest
24 голосов
/ 16 апреля 2010

Я бы хотел использовать 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 Ответ

37 голосов
/ 16 апреля 2010

Да, сделайте это:

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

Используется метод расширения Enumerable.Cast:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...