/// <summary> /// Registers a mapping between correlated collection query models and metadata needed to process them. /// </summary> /// <param name="mainFromClause"> The main from clause.</param> /// <param name="trackingQuery"> Flag indicating whether query should be tracked or not. </param> /// <param name="firstNavigation"> First navigation in the chain leading to collection navigation that is being optimized. </param> /// <param name="collectionNavigation"> Collection navigation that is being optimized. </param> /// <param name="parentQuerySource"> Query source that is origin of the collection navigation. </param> public virtual void RegisterCorrelatedSubqueryMetadata( [NotNull] MainFromClause mainFromClause, bool trackingQuery, [NotNull] INavigation firstNavigation, [NotNull] INavigation collectionNavigation, [NotNull] IQuerySource parentQuerySource) { Check.NotNull(mainFromClause, nameof(mainFromClause)); Check.NotNull(firstNavigation, nameof(firstNavigation)); Check.NotNull(collectionNavigation, nameof(collectionNavigation)); Check.NotNull(parentQuerySource, nameof(parentQuerySource)); if (_correlatedSubqueryMetadataMap == null) { _correlatedSubqueryMetadataMap = new Dictionary <MainFromClause, CorrelatedSubqueryMetadata>(); } _correlatedSubqueryMetadataMap[mainFromClause] = new CorrelatedSubqueryMetadata( _correlatedSubqueryMetadataMap.Count, trackingQuery, firstNavigation, collectionNavigation, parentQuerySource); }
/// <summary> /// Looks up a mapping between correlated collection query models and metadata needed to process them. /// </summary> /// <param name="mainFromClause"> The main from clause.</param> /// <param name="correlatedSubqueryMetadata"> The correlated sub-query metadata. </param> /// <returns> <c>True</c> if correlated sub-query metadata was registered; <c>false</c> otherwise. </returns> public virtual bool TryGetCorrelatedSubqueryMetadata( [NotNull] MainFromClause mainFromClause, [CanBeNull] out CorrelatedSubqueryMetadata correlatedSubqueryMetadata) { Check.NotNull(mainFromClause, nameof(mainFromClause)); correlatedSubqueryMetadata = null; return(_correlatedSubqueryMetadataMap?.TryGetValue(mainFromClause, out correlatedSubqueryMetadata) == true); }