تحويل مجموعة Collection إلى قائمة أو نوع البيانات القابلة للاستخدام مع LINQ

StackOverflow https://stackoverflow.com/questions/1571425

سؤال

أنا أستخدم خلايا في الغرض لمعالجة جداول بيانات 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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top