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); }
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 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)); }
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)); }