public override Expression?Visit(Expression?expression)
        {
            if (expression is InMemoryQueryExpression inMemoryQueryExpression)
            {
                var clonedInMemoryQueryExpression = new InMemoryQueryExpression(
                    inMemoryQueryExpression.ServerQueryExpression, inMemoryQueryExpression._valueBufferParameter)
                {
                    _groupingParameter      = inMemoryQueryExpression._groupingParameter,
                    _singleResultMethodInfo = inMemoryQueryExpression._singleResultMethodInfo,
                    _scalarServerQuery      = inMemoryQueryExpression._scalarServerQuery
                };

                clonedInMemoryQueryExpression._clientProjections.AddRange(
                    inMemoryQueryExpression._clientProjections.Select(e => Visit(e)));
                clonedInMemoryQueryExpression._projectionMappingExpressions.AddRange(
                    inMemoryQueryExpression._projectionMappingExpressions);
                foreach (var item in inMemoryQueryExpression._projectionMapping)
                {
                    clonedInMemoryQueryExpression._projectionMapping[item.Key] = Visit(item.Value);
                }

                return(clonedInMemoryQueryExpression);
            }

            if (expression is EntityProjectionExpression entityProjectionExpression)
            {
                return(entityProjectionExpression.Clone());
            }

            return(base.Visit(expression));
        }
 public InMemoryProjectionBindingRemovingExpressionVisitor(InMemoryQueryExpression queryExpression)
 {
     _queryExpression = queryExpression;
 }