예제 #1
0
            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);
            }
예제 #2
0
            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);
            }
예제 #3
0
            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));
            }
예제 #4
0
            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);
            }