У меня есть один базовый классПреобразование списка базы производной класса
public Enum TestType{
A,
B
}
public abstract class Base{
public int ID{ get;set;}
}
и производный класс
public class Derived1 : Base{
public string Prop1 {get;set;}
}
public class Derived2 : Base{
public string Prop2 {get;set;}
}
то у меня есть функция, которая возвращает базу
public IQueryable<Base> GetData(TestType type){
switch(type){
case A:
return new IQueryable<Derived1>();
case B:
return new IQueryable<Derived2>();
}
}
Сейчас, к сожалению, один из инструментов, с которыми я работаю, требует фактического типа и не может уйти с прохождением в базовом типе.
Как преобразовать результат возврата из GetData в его фактический тип, а не в базу. Я думал использовать выражения и бросить, но я не могу понять это.
Idealy GetData - это фабрика, которая получает данные, я не ожидаю, что там будет IQueryable < Base>, чтобы содержать список смешанных классов. Я НЕ ЗНАЮ ТИПА В ВРЕМЯ КОМИЛЯ! Я хотел бы иметь функцию от базы до выведенной во время выполнения без необходимости проверять базовый тип, а затем делать листинг (IE - сложение операторов if).
EDIT: добавлен некоторый базовый код, который поможет. Теперь элемент управления, который я использую, говорит, что он не может найти свойство Prop1 на базе (если я передаю в результирующий набор GetData, который возвращает IQueryable), но если я его конвертирую, он отлично работает. проблема в том, что я не знаю точного типа во время компиляции. Я просто знаю, что один из классов будет там.
Я не думаю, что вы можете уйти без фактического броска. Как вы ожидаете иметь список с гибридными элементами? –
не будет гибридных элементов – dbarnes
@dbarnes Не могли бы вы поместить небольшой код в 'IQueryable GetData()', чтобы показать, как могут быть возвращены различные типы данных? Если вам не нужна куча инструкций if, нам нужно увидеть логику того, как генерируются данные, поскольку подобная логика должна быть включена в литье. –