public override Expression VisitInclude(IncludeExpression expression, object argument)
        {
            Expression source = ApplyEagerLoads(_source, _resourceContext.EagerLoads, null);

            foreach (ResourceFieldChainExpression chain in IncludeChainConverter.GetRelationshipChains(expression))
            {
                source = ProcessRelationshipChain(chain, source);
            }

            return(source);
        }
Пример #2
0
        /// <summary>
        /// Inspects the included relationship chains and selects the ones that starts with the specified relationship.
        /// </summary>
        private IReadOnlyCollection <IReadOnlyCollection <RelationshipAttribute> > GetInclusionChainsStartingWith(RelationshipAttribute relationship)
        {
            IncludeExpression include = _evaluatedIncludeCache.Get() ?? IncludeExpression.Empty;
            IReadOnlyCollection <ResourceFieldChainExpression> chains = IncludeChainConverter.GetRelationshipChains(include);

            var inclusionChains = new List <IReadOnlyCollection <RelationshipAttribute> >();

            foreach (ResourceFieldChainExpression chain in chains)
            {
                if (chain.Fields.First().Equals(relationship))
                {
                    inclusionChains.Add(chain.Fields.Cast <RelationshipAttribute>().ToArray());
                }
            }

            return(inclusionChains);
        }
        public override Expression VisitInclude(IncludeExpression expression, object argument)
        {
            var source = ApplyEagerLoads(_source, _resourceContext.EagerLoads, null);

            foreach (ResourceFieldChainExpression chain in IncludeChainConverter.GetRelationshipChains(expression))
            {
                string path = null;

                foreach (var relationship in chain.Fields.Cast <RelationshipAttribute>())
                {
                    path = path == null ? relationship.RelationshipPath : path + "." + relationship.RelationshipPath;

                    var resourceContext = _resourceContextProvider.GetResourceContext(relationship.RightType);
                    source = ApplyEagerLoads(source, resourceContext.EagerLoads, path);
                }

                source = IncludeExtensionMethodCall(source, path);
            }

            return(source);
        }