/// <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);
        }
Esempio n. 2
0
        /// <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);
        }