سؤال

أعرف عن التباين، وأنا أعلم أنه بشكل عام فلن يكون ذلك ممكنا في C # حتى v4.0.

ومع ذلك أتساءل عن حالة معينة. هل هناك طريقة للحصول على تحويل IQueryable<Derived> ل IQueryable<Base> بواسطة بطريقة أو بأخرى إنشاء فئة مجمع لا يؤدي في الواقع إلى استفسار، ولكن في الواقع "تمر عبر" .Where<>() يتصل؟

حالة استخدامي هي أنني أحاول التعامل مع مخطط قاعدة البيانات لديها العديد من الجداول مماثلة. معظم الحقول مشتركة، والعديد من الحقول المشتركة تحتاج إلى الاستعلام عن كل طاولة. أنا أستخدم linqtosql. كنت آمل أن أتجنب تكرار جميع الاستعلامات لكل طاولة.

هل كانت مفيدة؟

المحلول

ما يلي ما الذي تبحث عنه؟

var results = queryable.OfType<Base>.Where(...);

ستجمع طريقة oftype أي شيء من النوع المحدد، وإذا كانت جميع العناصر الموجودة في المجموعة هي إما من قاعدة النوع، أو المستمدة من قاعدة النوع، يجب أن تكون مؤهلة. في المكان التالي، ستكون جميع العناصر من قاعدة النوع.

نصائح أخرى

ما يلي سيعمل أيضا، ارتوغ أنه أقل جمالا:

var results = queryable.Select(derived => (Base)derived).Where(...);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top