private void ProcessSelectableIdentifierEntityAccessor(IdentifierEntityAccessor expression, bool isSubQuery, Func <string, string> createVariableName, StrongEntityAccessor mainEntityAccessor)
        {
            if (_currentStrongEntityAccessorVisitDelegate == VisitStrongEntityAccessorInternal)
            {
                _currentStrongEntityAccessorVisitDelegate = VisitStrongEntityAccessorInternalQuick;
            }

            if (!isSubQuery)
            {
                if ((_metaGraphVariableName == null) && (_entityVariableName == null))
                {
                    _metaGraphVariableName = String.Format("G{0}", expression.About.Name);
                    _entityVariableName    = _ownerVariableName = expression.About.Name + "_Distinct";
                }

                _subjectVariableName   = expression.About.Name;
                _predicateVariableName = expression.About.Name + "_Predicate";
                _objectVariableName    = expression.About.Name + "_Object";

                _commandText.AppendFormat(
                    "DISTINCT(?{2}) AS ?{1} ?{0} ?{3} ?{4} ?{5} ",
                    _metaGraphVariableName,
                    _entityVariableName,
                    expression.About.Name,
                    _predicateVariableName,
                    _objectVariableName,
                    _ownerVariableName);
            }
        }
        /// <summary>Visit an identifier entity accessor.</summary>
        /// <param name="entityAccessor">Identifier entity accessor to be visited.</param>
        protected override void VisitIdentifierEntityAccessor(IdentifierEntityAccessor entityAccessor)
        {
            Call predicateBind = new Call(MethodNames.Bind);

            predicateBind.Arguments.Add(new Alias(new Literal(Rdf.predicate), new Identifier(entityAccessor.About.Name + "_Predicate")));
            Call objectBind = new Call(MethodNames.Bind);

            objectBind.Arguments.Add(new Alias(new Literal(Rdf.@object), new Identifier(entityAccessor.About.Name + "_Object")));
            _injectedComponents.Add(predicateBind);
            _injectedComponents.Add(objectBind);
            VisitStrongEntityAccessor(entityAccessor.EntityAccessor);
            _injectedComponents.Clear();
        }
        private void OverrideIdentifierSelector(StrongEntityAccessor entityAccessor)
        {
            IdentifierEntityAccessor identifierEntityAccessor = new IdentifierEntityAccessor(entityAccessor.About, entityAccessor);
            int indexOf = -1;

            if ((indexOf = _query.Elements.IndexOf(entityAccessor)) != -1)
            {
                _query.Elements.RemoveAt(indexOf);
                _query.Elements.Insert(indexOf, identifierEntityAccessor);
            }

            _query.Select.Clear();
            _query.Select.Add(identifierEntityAccessor);
            _mainFromComponent = identifierEntityAccessor;
        }
 /// <summary>Visit an identifier entity accessor.</summary>
 /// <param name="entityAccessor">Identifier entity accessor to be visited.</param>
 protected abstract void VisitIdentifierEntityAccessor(IdentifierEntityAccessor entityAccessor);
 /// <summary>Default constructor with nagivated identifier entity accessor.</summary>
 /// <param name="entityAccessor">Nagivated entity accessor.</param>
 internal IdentifierEntityAccessorNavigator(IdentifierEntityAccessor entityAccessor)
     : base(entityAccessor)
 {
 }
 /// <summary>Default constructor with nagivated identifier entity accessor.</summary>
 /// <param name="entityAccessor">Nagivated entity accessor.</param>
 internal IdentifierEntityAccessorNavigator(IdentifierEntityAccessor entityAccessor)
     : base(entityAccessor)
 {
 }