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