تحويل مجموعة Collection إلى قائمة أو نوع البيانات القابلة للاستخدام مع LINQ
-
21-09-2019 - |
سؤال
أنا أستخدم خلايا في الغرض لمعالجة جداول بيانات Excel. أحد الأنواع الموجودة في واجهة برمجة التطبيقات هي مجموعة من الصور في جدول البيانات ، والتي مستمدة من CollectionBase:
انظر هذا الرابط:http://www.aspose.com/documentation/.net-components/aspose.cells-for-.net/aspose.cells.pictures.html
أريد تحويل هذا النوع إلى شيء يسمح لي باستخدام تعبيرات LINQ
ما هي الخيارات لهذا؟
أعتقد أنه يمكنني التكرار أكثر من ذلك وإضافته يدويًا إلى new List<Picture>
ولكن هل هناك طريقة أفضل للقيام بذلك؟
لقد قرأت هذا السؤالمضيفا ienumerableu003CT> إلى الفصل المستمد من مجموعة CollectionBase
لكن من الواضح أنه ليس لدي سيطرة على الفصل الذي ينفذ CollectionBace لأنه منتج طرف ثالث
المحلول
فقط استخدم Enumerable.Cast<T>()
طريقة التمديد على غير الجنرال IEnumerable
الواجهة ، والتي يمكنك القيام بها ضمنيًا في تعبير الاستعلام:
var query = from Picture picture in pictures
where ...
select ...;
أو بشكل صريح ، على سبيل المثال إذا كنت تريد استخدام ترميز DOT:
var query = pictures.Cast<Picture>()
.Where(...)
.Select(...);
بديل ل Cast<T>()
هو OfType<T>()
- الذي يتجاهل بشكل أساسي أي عناصر ليست من النوع الصحيح. في هذه الحالة أعتقد Cast<T>()
هو أكثر ملاءمة رغم ذلك.
إذا كنت ترغب في تحويل المجموعة بأكملها إلى أ List<T>
لأي سبب من الأسباب ، هذا سهل أيضًا:
List<Picture> list = pictures.Cast<Picture>().ToList();