Преобразуйте базу коллекций в список или тип данных, который можно использовать с помощью Linq
-
21-09-2019 - |
Вопрос
Я использую ячейки Aspose для работы с электронными таблицами Excel.Одним из типов в API является коллекция изображений в электронной таблице, которая является производной от CollectionBase:
смотрите эту ссылку:http://www.aspose.com/documentation/.net-components/aspose.cells-for-.net/aspose.cells.pictures.html
Я хочу преобразовать этот тип во что-то, что позволяет мне использовать выражения Linq
Какие есть варианты для этого?
Я предполагаю, что я мог бы повторить это и вручную добавить его в new List<Picture>
Но есть ли лучший способ сделать это?
Я прочитал этот вопрос Добавление IEnumerable<T> к классу, производному от CollectionBase
Но у меня, очевидно, нет контроля над классом, который реализует CollectionBace, поскольку это сторонний продукт
Решение
Просто используйте Enumerable.Cast<T>()
метод расширения на неродовой IEnumerable
интерфейс, который вы можете выполнить неявно в выражении запроса:
var query = from Picture picture in pictures
where ...
select ...;
или явно, например, если вы хотите использовать точечную нотацию:
var query = pictures.Cast<Picture>()
.Where(...)
.Select(...);
Альтернативой Cast<T>()
является OfType<T>()
- который в основном игнорирует любые элементы, которые не относятся к нужному типу.В данном случае я думаю Cast<T>()
хотя это более уместно.
Если вы хотите преобразовать всю коллекцию в List<T>
по какой бы то ни было причине, это тоже легко:
List<Picture> list = pictures.Cast<Picture>().ToList();