protected override Expression VisitConstant(ConstantExpression node) { if (node.Value is OeEnumerableStub enumerableStub) { IQueryable query = null; if (_queryableSource != null) { query = _queryableSource(enumerableStub.EntitySet); if (query != null && query.Expression is MethodCallExpression) { return(query.Expression); } } if (query == null) { Db.OeEntitySetAdapter entitySetAdapter = _edmModel.GetEntitySetAdapter(enumerableStub.EntitySet); query = entitySetAdapter.GetEntitySet(_dataContext); } return(Expression.Constant(query)); } return(node); }
protected override Expression VisitConstant(ConstantExpression node) { if (node.Value is OeEnumerableStub enumerableStub) { IQueryable?query = null; if (_queryableSource != null) { query = _queryableSource(enumerableStub.EntitySet); if (query != null && query.Expression is MethodCallExpression) { return(query.Expression); } } if (query == null) { if (_dataContext == null) { throw new InvalidOperationException("If function queryableSource return null dataContext must be not null"); } Db.OeEntitySetAdapter entitySetAdapter = _edmModel.GetEntitySetAdapter(enumerableStub.EntitySet); query = entitySetAdapter.GetEntitySet(_dataContext); } return(query.Expression); } return(node); }
protected override Expression VisitConstant(ConstantExpression node) { if (node.Type.IsGenericType && (node.Type.GetGenericTypeDefinition() == typeof(IEnumerable <>) || node.Type.GetGenericTypeDefinition() == typeof(IQueryable <>))) { Db.OeEntitySetAdapter entitySetAdapter = _entitySetAdapters.FindByClrType(node.Type.GetGenericArguments()[0]); IQueryable query = entitySetAdapter.GetEntitySet(_dataContext); return(Expression.Constant(query)); } return(base.VisitConstant(node)); }
private ConstantExpression GetQueryConstantExpression(Expression node) { if (node.Type.IsGenericType && node.Type.GetGenericTypeDefinition() == typeof(IQueryable <>)) { Db.OeEntitySetAdapter entitySetAdapter = _entitySetAdapters.FindByClrType(node.Type.GetGenericArguments()[0]); IQueryable query = entitySetAdapter.GetEntitySet(_dataContext); if (_query == null && entitySetAdapter.EntityType == typeof(T)) { _query = (IQueryable <T>)query; } return(Expression.Constant(query)); } return(null); }