2015-08-21 15 views
0

У меня такой код в базовом классе, который известен тип его производного класса. Я хотел бы знать, можно ли применить IQueryable<DerivedType>.Как получить динамический тип IQueryable

Я хотел бы знать, могу ли я отключить XXX для типа класса, известного моей переменной EntityType. Как это могло быть сделано с результатом выбора правильной таблицы сущностей из dbEntities

BaseClass.cs

protected abstract Type EntityType {get;} 

public virtual DataSourceResult populate([DataSourceRequest]DataSourceRequest request) 
{ 

    using (var dbEntities = new dbEntities()) 
    { 
     IQueryable<XXX> entityResult = dbEntities.XXX; 
     DataSourceResult result = entityResult.ToDataSourceResult(request); 
     return result; 
    } 
} 

Пример: Я хочу, чтобы получить IQueryAble<> типа Type EntityType, а также должен выбрать этот тип от dbEntities. Так что скажите, что у меня есть таблица в dbEntities под названием giraffe, которая унаследована от animal. Тогда текущий код выше относится к базовому классу animal. EntityTpe знает, что EntityType.Name равен жирафу. Так что я бы с XXX вывел в эквиваленте IQueryable<giraffe> entityResult = dbEntities.giraffe

+0

Да, вы можете заменить ХХХХ для любого класса, реализующего XXXX, если это ваш вопрос –

+0

Вид, я хочу, чтобы получить ' IQueryAble <> 'типа' Type EntityType', а также выбрать этот тип из 'dbEntities'. Так сказать, у меня есть таблица в 'dbEntities', называемая' giraffe', которая унаследована от 'animal'. Затем текущий код принадлежит базовому классу «animal». 'EntityTpe' знает, что' EntityType.Name' равно жирафу. Так что я бы с XXX вывел в эквиваленте значение 'IQueryable entityResult = dbEntities.giraffe' – lzc

+0

Да, вы можете это сделать, сущность по-прежнему является классом POCO .NET –

ответ

2

Для этого вы можете использовать дженерики. Вам также необходимо использовать свойство DbSet<T> вашего контекста. Что-то вроде этого нужно сделать:

public virtual DataSourceResult populate<T>([DataSourceRequest]DataSourceRequest request) 
{ 

    using (var dbEntities = new dbEntities()) 
    { 
     IQueryable<T> entityResult = dbEntities.DbSet<T>(); 
     DataSourceResult result = entityResult.ToDataSourceResult(request); 
     return result; 
    } 
} 

И называть это так:

var result = populate<MyEntity>(request); 
+0

У моего' dbEntites' нет 'DbSet < >() ', это проблема? – lzc

+1

Ну, мы понятия не имеем, что такое тип 'dbEntities'. – DavidG

+0

Итак, это модель файла .edmx, которая наследуется от 'ObjectContext' – lzc

Смежные вопросы