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