protected override ShapedQueryExpression TranslateAll(ShapedQueryExpression source, LambdaExpression predicate)
        {
            var selectExpression = (SelectExpression)source.QueryExpression;

            if (selectExpression.Limit != null ||
                selectExpression.Offset != null)
            {
                selectExpression.PushdownIntoSubQuery();
            }

            var translation = TranslateLambdaExpression(source, predicate);

            if (translation != null)
            {
                selectExpression.ApplyPredicate(_sqlExpressionFactory.Not(translation));
                selectExpression.ReplaceProjection(new Dictionary <ProjectionMember, Expression>());
                if (selectExpression.Limit == null &&
                    selectExpression.Offset == null)
                {
                    selectExpression.ClearOrdering();
                }

                translation             = _sqlExpressionFactory.Exists(selectExpression, true);
                source.QueryExpression  = _sqlExpressionFactory.Select(translation);
                source.ShaperExpression = new ProjectionBindingExpression(source.QueryExpression, new ProjectionMember(), typeof(bool));

                return(source);
            }

            throw new InvalidOperationException();
        }