Esempio n. 1
0
        private System.Linq.Expressions.Expression VisitPredicateMethodCallUnsafe(System.Linq.Expressions.MethodCallExpression expression, Uri predicate, StrongEntityAccessor entityAccessor)
        {
            _query.AddEntityAccessor(entityAccessor);
            Identifier      memberIdentifier = new Identifier(_query.CreateVariableName(predicate.GetFragmentOrLastSegment()));
            EntityConstrain constrain        = new EntityConstrain();

            constrain.Predicate = new Literal(predicate);
            constrain.Value     = memberIdentifier;
            if (!entityAccessor.Elements.Contains(constrain))
            {
                entityAccessor.Elements.Add(constrain);
            }

            if (constrain.ShouldBeOptional(_currentComponent))
            {
                entityAccessor.Elements.Remove(constrain);
                OptionalPattern optional = new OptionalPattern();
                optional.Patterns.Add(constrain);
                entityAccessor.Elements.Add(optional);
            }

            HandleComponent(memberIdentifier);
            _lastComponent = memberIdentifier;
            return(expression);
        }
        private void VisitAnyResultOperator(AnyResultOperator anyResultOperator, Remotion.Linq.QueryModel queryModel, int index)
        {
            string targetIdentifierString            = _visitor.Query.CreateIdentifier(_visitor.ItemNameOverride);
            IList <EntityConstrain> entityConstrains = null;
            StrongEntityAccessor    entityAccessor   = (from accessor in _visitor.Query.GetQueryComponentNavigator().FindAllComponents <StrongEntityAccessor>()
                                                        let constrains = accessor.Elements.OfType <EntityConstrain>()
                                                                         from constrain in constrains
                                                                         let predicate = constrain.Predicate as Literal
                                                                                         where predicate != null
                                                                                         let predicateUri = (Uri)predicate.Value
                                                                                                            let identifier = constrain.Value as Identifier
                                                                                                                             where identifier != null
                                                                                                                             let identifierString = _visitor.Query.RetrieveIdentifier(identifier.Name)
                                                                                                                                                    where (identifierString == targetIdentifierString) || ((_fromExpression != null) && (constrain.TargetExpression.EqualsTo(_fromExpression)))
                                                                                                                                                    where (entityConstrains = constrains.Where(item =>
                                                                                                                                                                                               (item.Predicate is Literal) && (((Uri)((Literal)item.Predicate).Value).AbsoluteUri == predicateUri.AbsoluteUri)).ToList()).Count > 0
                                                                                                                                                    select accessor).FirstOrDefault();

            if (entityAccessor != null)
            {
                foreach (EntityConstrain entityConstrain in entityConstrains)
                {
                    int indexOf = entityAccessor.Elements.IndexOf(entityConstrain);
                    entityAccessor.Elements.RemoveAt(indexOf);
                    OptionalPattern optional = new OptionalPattern();
                    optional.Patterns.Add(entityConstrain);
                    entityAccessor.Elements.Insert(indexOf, optional);
                }
            }

            Call call = new Call(MethodNames.Bound);

            _result = call;
        }
        /// <summary>Visit an optional patterns.</summary>
        /// <param name="optionalPattern">Optional patterns accessor to be visited.</param>
        protected override void VisitOptionalPattern(OptionalPattern optionalPattern)
        {
            _commandText.Append(Indentation);
            _commandText.AppendLine("OPTIONAL { ");
            Indentation += "\t";
            foreach (EntityConstrain pattern in optionalPattern.Patterns)
            {
                VisitComponent(pattern);
            }

            Indentation = Indentation.Substring(0, Indentation.Length - 1);
            _commandText.Append(Indentation);
            _commandText.AppendLine("} ");
        }
Esempio n. 4
0
        /// <summary>Visits an entity member.</summary>
        /// <param name="expression">Expression to be visited.</param>
        /// <returns>Expression visited</returns>
        protected virtual System.Linq.Expressions.Expression VisitEntityProperty(EntityPropertyExpression expression)
        {
            StrongEntityAccessor entityAccessor = this.GetEntityAccessor(expression.Target);

            _query.AddEntityAccessor(entityAccessor);
            Identifier      memberIdentifier = null;
            EntityConstrain constrain        = _query.FindAllComponents <EntityConstrain>()
                                               .FirstOrDefault(item => (item.GetType() == typeof(EntityConstrain) && (item.TargetExpression.EqualsTo(expression.Expression))));

            if (constrain == null)
            {
                memberIdentifier = (_query.FindAllComponents <StrongEntityAccessor>()
                                    .Where(item => item.SourceExpression.FromExpression.EqualsTo(expression.Expression))
                                    .Select(item => item.About).FirstOrDefault()) ?? (new Identifier(_query.CreateVariableName(expression.Name), expression.EntityProperty.PropertyType));
                constrain = new EntityConstrain(new Literal(expression.PropertyMapping.Uri), memberIdentifier, expression.Expression);
                if (!entityAccessor.Elements.Contains(constrain))
                {
                    entityAccessor.Elements.Add(constrain);
                }
            }
            else
            {
                if (constrain.ShouldBeOptional(_currentComponent))
                {
                    entityAccessor.Elements.Remove(constrain);
                    OptionalPattern optional = new OptionalPattern();
                    optional.Patterns.Add(constrain);
                    entityAccessor.Elements.Add(optional);
                }

                memberIdentifier = (Identifier)constrain.Value;
            }

            HandleComponent(memberIdentifier);
            _lastComponent = memberIdentifier;
            return(expression);
        }
 /// <summary>Visit an optional patterns.</summary>
 /// <param name="optionalPattern">Optional patterns to be visited.</param>
 protected abstract void VisitOptionalPattern(OptionalPattern optionalPattern);
 /// <summary>Default constructor with nagivated optional patterns.</summary>
 /// <param name="optionalPattern">Nagivated optional patterns.</param>
 internal OptionalPatternNavigator(OptionalPattern optionalPattern)
     : base(optionalPattern)
 {
 }
 /// <summary>Default constructor with nagivated optional patterns.</summary>
 /// <param name="optionalPattern">Nagivated optional patterns.</param>
 internal OptionalPatternNavigator(OptionalPattern optionalPattern)
     : base(optionalPattern)
 {
 }