Пример #1
0
        public virtual SelectExpression TryGetQuery([NotNull] IQuerySource querySource)
        {
            Check.NotNull(querySource, nameof(querySource));

            SelectExpression selectExpression;

            return(QueriesBySource.TryGetValue(querySource, out selectExpression)
                ? selectExpression
                : QueriesBySource.Values.SingleOrDefault(se => se.HandlesQuerySource(querySource)));
        }
        /// <summary>
        /// Get active ReadOnlyExpression
        /// </summary>
        /// <param name="querySource"></param>
        /// <returns></returns>
        public virtual ReadOnlyExpression TryGetQuery([NotNull] IQuerySource querySource)
        {
            Check.NotNull(querySource, nameof(querySource));

            return(QueriesBySource.TryGetValue(querySource, out ReadOnlyExpression roe)
                ? roe
                : QueriesBySource
                   .Values
                   .LastOrDefault(e => e.HandlesQuerySource(querySource)));
        }
        public override SelectExpression TryGetQuery(IQuerySource querySource)
        {
            SelectExpression selectExpression;

            if (QueriesBySource.TryGetValue(querySource, out selectExpression))
            {
                return(selectExpression);
            }
            return(QueriesBySource.Values.SingleOrDefault(se => se.HandlesQuerySource(querySource)));
        }
        public override void VisitQueryModel(QueryModel queryModel)
        {
            base.VisitQueryModel(queryModel);

            if (ContextOptions.FindExtension <SqlServerOptionsExtension>()?.RowNumberPaging == true)
            {
                var visitor = new RowNumberPagingExpressionVisitor();

                SelectExpression mainSelectExpression;
                if (QueriesBySource.TryGetValue(queryModel.MainFromClause, out mainSelectExpression))
                {
                    visitor.Visit(mainSelectExpression);
                }

                foreach (var additionalSource in queryModel.BodyClauses.OfType <IQuerySource>())
                {
                    SelectExpression additionalFromExpression;
                    if (QueriesBySource.TryGetValue(additionalSource, out additionalFromExpression))
                    {
                        visitor.Visit(mainSelectExpression);
                    }
                }
            }
        }