public override object VisitInclude(IncludeExpression expression, object argument)
            {
                foreach (IncludeElementExpression element in expression.Elements)
                {
                    Visit(element, null);
                }

                return(null);
            }
Example #2
0
        public override QueryExpression VisitInclude(IncludeExpression expression, TArgument argument)
        {
            if (expression != null)
            {
                var newElements = VisitSequence(expression.Elements, argument);

                if (newElements.Count == 0)
                {
                    return(IncludeExpression.Empty);
                }

                var newExpression = new IncludeExpression(newElements);
                return(newExpression.Equals(expression) ? expression : newExpression);
            }

            return(null);
        }
        /// <summary>
        /// Converts a tree of inclusions into a set of relationship chains.
        /// </summary>
        /// <example>
        /// Input tree:
        /// Article
        /// {
        ///   Blog,
        ///   Revisions
        ///   {
        ///     Author
        ///   }
        /// }
        ///
        /// Output chains:
        /// Article -> Blog,
        /// Article -> Revisions -> Author
        /// </example>
        public static IReadOnlyCollection <ResourceFieldChainExpression> GetRelationshipChains(IncludeExpression include)
        {
            if (include == null)
            {
                throw new ArgumentNullException(nameof(include));
            }

            IncludeToChainsConverter converter = new IncludeToChainsConverter();

            converter.Visit(include, null);

            return(converter.Chains);
        }
Example #4
0
        /// <summary>
        /// Converts a tree of inclusions into a set of relationship chains.
        /// </summary>
        /// <example>
        /// Input tree:
        /// <code><![CDATA[
        /// Article
        /// {
        ///   Blog,
        ///   Revisions
        ///   {
        ///     Author
        ///   }
        /// }
        /// ]]></code>
        /// Output chains:
        /// <code><![CDATA[
        /// Article -> Blog,
        /// Article -> Revisions -> Author
        /// ]]></code>
        /// </example>
        public static IReadOnlyCollection <ResourceFieldChainExpression> GetRelationshipChains(IncludeExpression include)
        {
            ArgumentGuard.NotNull(include, nameof(include));

            IncludeToChainsConverter converter = new IncludeToChainsConverter();

            converter.Visit(include, null);

            return(converter.Chains);
        }
Example #5
0
        /// <summary>
        /// Converts a tree of inclusions into a set of relationship chains.
        /// </summary>
        /// <example>
        /// Input tree: <code><![CDATA[
        /// Article
        /// {
        ///   Blog,
        ///   Revisions
        ///   {
        ///     Author
        ///   }
        /// }
        /// ]]></code> Output chains:
        /// <code><![CDATA[
        /// Article -> Blog,
        /// Article -> Revisions -> Author
        /// ]]></code>
        /// </example>
        public IReadOnlyCollection <ResourceFieldChainExpression> GetRelationshipChains(IncludeExpression include)
        {
            ArgumentGuard.NotNull(include, nameof(include));

            if (!include.Elements.Any())
            {
                return(Array.Empty <ResourceFieldChainExpression>());
            }

            var converter = new IncludeToChainsConverter();

            converter.Visit(include, null);

            return(converter.Chains);
        }