Вопрос

Я знаю о ковариации, и я знаю, что в общем случае это будет невозможно в C # до версии 4.0.

Однако меня интересует конкретный случай.Есть ли какой-то способ получить конвертацию IQueryable<Derived> Для IQueryable<Base> каким-то образом создав класс-оболочку, который на самом деле не выполняет запрос, но на самом деле может "проходить" через .Where<>() позвонить?

Мой вариант использования заключается в том, что я пытаюсь иметь дело со схемой базы данных, которая содержит много похожих таблиц.Большинство полей являются общими, и многие из общих полей необходимо запрашивать в каждой таблице.Я использую LinqToSql.Я надеялся избежать дублирования всех запросов для каждой таблицы.

Это было полезно?

Решение

Является ли следующее тем, что вы ищете?

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

Метод OfType соберет все, что относится к указанному типу, и если все элементы в коллекции либо относятся к типу Base, либо являются производными от типа base, они должны соответствовать требованиям.В последующем where все элементы будут иметь тип Base.

Другие советы

Следующее также будет работать, хотя оно и менее красиво:

var results = queryable.Select(derived => (Base)derived).Where(...);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top