Ejemplo n.º 1
0
            private bool TryResolveQueryableSuorceInConstantQueryArgument(object?value, out ConstantQueryArgument?newConstantQueryArgument)
            {
                if (value is ConstantQueryArgument constantQueryArgument)
                {
                    var hasChanged = false;
                    var tempConstantQueryArgument = new ConstantQueryArgument(constantQueryArgument.Value);
                    foreach (var property in tempConstantQueryArgument.Value.Properties.AsEmptyIfNull())
                    {
                        if (TryGetQueryableByQueryableResourceDescriptor(property.Value, out var queryable))
                        {
                            property.Value = queryable;
                            hasChanged     = true;
                        }
                    }

                    if (hasChanged)
                    {
                        newConstantQueryArgument = tempConstantQueryArgument;
                        return(true);
                    }
                }

                newConstantQueryArgument = null;
                return(false);
            }
Ejemplo n.º 2
0
            protected override ConstantExpression VisitConstant(ConstantExpression node)
            {
                var queryable = node.CheckNotNull(nameof(node)).Value.AsQueryableOrNull();

                if (queryable != null)
                {
                    var typeInfo = _typeInfoProvider.GetTypeInfo(queryable.ElementType);
                    var queryableResourceDescriptor = new QueryableResourceDescriptor(typeInfo);
                    return(new ConstantExpression(queryableResourceDescriptor));
                }

                if (node.Value is ConstantQueryArgument constantQueryArgument)
                {
                    var newConstantQueryArgument = new ConstantQueryArgument(constantQueryArgument);
                    var properties = newConstantQueryArgument.Properties ?? Enumerable.Empty <Property>();
                    foreach (var property in properties)
                    {
                        var value = property.Value.AsQueryableOrNull();
                        if (value != null)
                        {
                            var typeInfo = _typeInfoProvider.GetTypeInfo(value.ElementType);
                            var queryableResourceDescriptor = new QueryableResourceDescriptor(typeInfo);
                            property.Value = queryableResourceDescriptor;
                        }
                    }

                    return(new ConstantExpression(newConstantQueryArgument, node.Type));
                }

                return(base.VisitConstant(node));
            }
Ejemplo n.º 3
0
            protected override ConstantExpression VisitConstant(ConstantExpression expression)
            {
                var type = expression.Type.ResolveType(_typeResolver);

                if (type == typeof(QueryableResourceDescriptor) && !(expression.Value is null))
                {
                    var queryableResourceDescriptor = (QueryableResourceDescriptor)expression.Value;
                    var queryableType = queryableResourceDescriptor.Type.ResolveType(_typeResolver);
                    var queryable     = _provider(queryableType);
                    return(new ConstantExpression(queryable));
                }

                if (type == typeof(ConstantQueryArgument) && !(expression.Value is null))
                {
                    var newConstantQueryArgument = new ConstantQueryArgument((ConstantQueryArgument)expression.Value);
                    var properties = newConstantQueryArgument.Properties ?? Enumerable.Empty <Property>();
                    foreach (var property in properties)
                    {
                        var queryableResourceDescriptor = property.Value as QueryableResourceDescriptor;
                        if (!(queryableResourceDescriptor is null))
                        {
                            var queryableType = queryableResourceDescriptor.Type.ResolveType(_typeResolver);
                            var queryable     = _provider(queryableType);
                            property.Value = queryable;
                        }
                    }

                    return(new ConstantExpression(newConstantQueryArgument));
                }

                return(base.VisitConstant(expression));
            }
Ejemplo n.º 4
0
            protected override ConstantExpression VisitConstant(ConstantExpression expression)
            {
                var queryable = AsQueryableOrNull(expression.Value);

                if (!(queryable is null))
                {
                    var typeInfo = _typeInfoProvider.Get(queryable.ElementType);
                    var queryableResourceDescriptor = new QueryableResourceDescriptor(typeInfo);
                    return(new ConstantExpression(queryableResourceDescriptor));
                }

                var constantQueryArgument = expression.Value as ConstantQueryArgument;

                if (!(constantQueryArgument is null))
                {
                    var newConstantQueryArgument = new ConstantQueryArgument(constantQueryArgument);
                    var properties = newConstantQueryArgument.Properties ?? Enumerable.Empty <Property>();
                    foreach (var property in properties)
                    {
                        var value = AsQueryableOrNull(property.Value);
                        if (!(value is null))
                        {
                            var typeInfo = _typeInfoProvider.Get(value.ElementType);
                            var queryableResourceDescriptor = new QueryableResourceDescriptor(typeInfo);
                            property.Value = queryableResourceDescriptor;
                        }
                    }

                    return(new ConstantExpression(newConstantQueryArgument, expression.Type));
                }

                return(base.VisitConstant(expression));
            }
            protected override ConstantExpression VisitConstant(ConstantExpression expression)
            {
                var queryable = AsQueryableOrNull(expression.Value);

                if (!ReferenceEquals(null, queryable))
                {
                    var queryableResourceDescriptor = new QueryableResourceDescriptor(queryable.ElementType);
                    return(new ConstantExpression(queryableResourceDescriptor));
                }

                var constantQueryArgument = expression.Value as ConstantQueryArgument;

                if (!ReferenceEquals(null, constantQueryArgument))
                {
                    var newConstantQueryArgument = new ConstantQueryArgument(constantQueryArgument);
                    var properties = newConstantQueryArgument.Properties ?? Enumerable.Empty <Property>();
                    foreach (var property in properties)
                    {
                        var value = AsQueryableOrNull(property.Value);
                        if (!ReferenceEquals(null, value))
                        {
                            var queryableResourceDescriptor = new QueryableResourceDescriptor(value.ElementType);
                            property.Value = queryableResourceDescriptor;
                        }
                    }

                    return(new ConstantExpression(newConstantQueryArgument, expression.Type));
                }

                return(base.VisitConstant(expression));
            }