public override void VisitWhereClause(WhereClause whereClause, QueryModel queryModel, int index)
        {
            if (Expression is QueryShaperExpression queryShaperExpression)
            {
                if (queryShaperExpression.QueryExpression is DocumentQueryExpression documentQueryExpression)
                {
                    var selectExpression = documentQueryExpression.SelectExpression;
                    var sqlTranslatingExpressionVisitor = new SqlTranslatingExpressionVisitor(
                        selectExpression, QueryCompilationContext);
                    var sqlPredicate = sqlTranslatingExpressionVisitor.Visit(whereClause.Predicate);

                    if (sqlTranslatingExpressionVisitor.Translated)
                    {
                        selectExpression.AddToPredicate(sqlPredicate);

                        return;
                    }
                }

                if (AllMembersBoundToJObject)
                {
                    var fromClause            = queryModel.MainFromClause;
                    var previousParameterType = CurrentParameter.Type;

                    // Temporarily change current parameter to JObject to try binding to it without materializing the entity
                    UpdateCurrentParameter(fromClause, typeof(JObject));

                    var predicate = ReplaceClauseReferences(whereClause.Predicate);

                    if (AllMembersBoundToJObject)
                    {
                        Expression = new QueryShaperExpression(
                            QueryCompilationContext.IsAsyncQuery,
                            Expression.Call(
                                LinqOperatorProvider.Where.MakeGenericMethod(CurrentParameter.Type),
                                queryShaperExpression.QueryExpression,
                                Expression.Lambda(predicate, CurrentParameter)),
                            queryShaperExpression.Shaper);

                        if (CurrentParameter.Type == typeof(JObject))
                        {
                            UpdateCurrentParameter(fromClause, previousParameterType);
                        }

                        return;
                    }

                    UpdateCurrentParameter(fromClause, previousParameterType);
                }
            }

            base.VisitWhereClause(whereClause, queryModel, index);
        }
        public override void VisitWhereClause(WhereClause whereClause, QueryModel queryModel, int index)
        {
            Debug.Assert(Expression is QueryShaperExpression, "Invalid Expression encountered");

            var queryShaperExpression = (QueryShaperExpression)Expression;

            if (queryShaperExpression.QueryExpression is DocumentQueryExpression documentQueryExpression)
            {
                var selectExpression = documentQueryExpression.SelectExpression;
                var sqlTranslatingExpressionVisitor = new SqlTranslatingExpressionVisitor(
                    selectExpression, QueryCompilationContext);
                var sqlPredicate = sqlTranslatingExpressionVisitor.Visit(whereClause.Predicate);

                if (sqlPredicate != null)
                {
                    selectExpression.AddToPredicate(sqlPredicate);

                    return;
                }
            }

            var fromClause = queryModel.MainFromClause;

            // Change current parameter to JObject
            UpdateCurrentParameter(fromClause, typeof(JObject));

            var predicate = ReplaceClauseReferences(whereClause.Predicate);

            Expression = new QueryShaperExpression(
                Expression.Call(LinqOperatorProvider.Where.MakeGenericMethod(CurrentParameter.Type),
                                queryShaperExpression.QueryExpression,
                                Expression.Lambda(predicate, CurrentParameter)),
                queryShaperExpression.Shaper);

            UpdateCurrentParameter(fromClause, Expression.Type.TryGetSequenceType());

            //base.VisitWhereClause(whereClause, queryModel, index);
        }