Exemplo n.º 1
0
            protected override Expression VisitConstant(ConstantExpression node)
            {
                if (node.CheckNotNull(nameof(node)).Value.AsQueryableResourceTypeOrNull() is Type resourceType)
                {
                    var typeInfo = _typeInfoProvider.GetTypeInfo(resourceType);
                    var queryableResourceDescriptor = new QueryableResourceDescriptor(typeInfo);
                    return(new ConstantExpression(queryableResourceDescriptor));
                }

                if (node.Value is ConstantQueryArgument constantQueryArgument)
                {
                    var copy = new DynamicObject(constantQueryArgument.Value);
                    foreach (var property in copy.Properties.AsEmptyIfNull())
                    {
                        if (property.Value.AsQueryableResourceTypeOrNull() is Type resourceTypePropertyValue)
                        {
                            var typeInfo = _typeInfoProvider.GetTypeInfo(resourceTypePropertyValue);
                            var queryableResourceDescriptor = new QueryableResourceDescriptor(typeInfo);
                            property.Value = queryableResourceDescriptor;
                        }
                    }

                    return(new ConstantExpression(new ConstantQueryArgument(copy), node.Type));
                }

                if (node.Value is CancellationToken)
                {
                    var substitutionValue = new SubstitutionValue(node.Type);
                    return(new ConstantExpression(substitutionValue, node.Type));
                }

                return(base.VisitConstant(node));
            }
Exemplo n.º 2
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));
            }
Exemplo n.º 3
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));
            }
            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));
            }