public override object VisitInclude(IncludeExpression expression, object argument) { foreach (IncludeElementExpression element in expression.Elements) { Visit(element, null); } return(null); }
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); }
/// <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); }
/// <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); }