сначала я бы предложил проверить PropertyType, если это действительно DBSet.
Обратите внимание, что type.GetValue(_dbContext)
возвращает объект, но вы должны обрабатывать тип как dynamic
во время отражения.
Так как вам нужна динамика для поддержки методов IEnumerable
, вам необходимо использовать IEnumerable<dynamic>
.
Ваш код должен выглядеть следующим образом:
var types = _dbContext.GetType().GetProperties();
// Check if property is really a DbSet<TEntity>
var filteredTypes = types.Where(x => x.PropertyType.IsGenericType
&& x.PropertyType.GetGenericTypeDefinition() == typeof(DbSet<>));
foreach (var type in filteredTypes)
{
var dbSet = (IEnumerable<dynamic>) type.GetValue(_dbContext);
var entities = dbSet.ToList();
}