protected abstract ShapedQueryExpression TranslateGroupBy( [NotNull] ShapedQueryExpression source, [NotNull] LambdaExpression keySelector, [CanBeNull] LambdaExpression elementSelector, [CanBeNull] LambdaExpression resultSelector);
protected abstract ShapedQueryExpression TranslateSingleOrDefault(ShapedQueryExpression source, LambdaExpression predicate, Type returnType, bool returnDefault);
protected abstract ShapedQueryExpression TranslateSum(ShapedQueryExpression source, LambdaExpression selector, Type resultType);
protected abstract ShapedQueryExpression TranslateOrderBy(ShapedQueryExpression source, LambdaExpression keySelector, bool ascending);
protected abstract ShapedQueryExpression TranslateSelectMany(ShapedQueryExpression source, LambdaExpression collectionSelector, LambdaExpression resultSelector);
protected abstract ShapedQueryExpression TranslateIntersect(ShapedQueryExpression source1, ShapedQueryExpression source2);
protected abstract ShapedQueryExpression TranslateLongCount(ShapedQueryExpression source, LambdaExpression predicate);
protected abstract ShapedQueryExpression TranslateSum( [NotNull] ShapedQueryExpression source, [CanBeNull] LambdaExpression selector, [NotNull] Type resultType);
protected abstract ShapedQueryExpression TranslateTake([NotNull] ShapedQueryExpression source, [NotNull] Expression count);
protected abstract ShapedQueryExpression TranslateSelectMany( [NotNull] ShapedQueryExpression source, [NotNull] LambdaExpression selector);
protected abstract ShapedQueryExpression TranslateSingleOrDefault( [NotNull] ShapedQueryExpression source, [CanBeNull] LambdaExpression predicate, [NotNull] Type returnType, bool returnDefault);
protected abstract ShapedQueryExpression TranslateOfType([NotNull] ShapedQueryExpression source, [NotNull] Type resultType);
protected abstract ShapedQueryExpression TranslateLongCount( [NotNull] ShapedQueryExpression source, [CanBeNull] LambdaExpression predicate);
protected abstract ShapedQueryExpression TranslateLeftJoin( [NotNull] ShapedQueryExpression outer, [NotNull] ShapedQueryExpression inner, [CanBeNull] LambdaExpression outerKeySelector, [CanBeNull] LambdaExpression innerKeySelector, [NotNull] LambdaExpression resultSelector);
protected abstract ShapedQueryExpression TranslateExcept(ShapedQueryExpression source1, ShapedQueryExpression source2);
protected abstract ShapedQueryExpression TranslateThenBy( [NotNull] ShapedQueryExpression source, [NotNull] LambdaExpression keySelector, bool ascending);
protected abstract ShapedQueryExpression TranslateGroupBy(ShapedQueryExpression source, LambdaExpression keySelector, LambdaExpression elementSelector, LambdaExpression resultSelector);
protected abstract ShapedQueryExpression TranslateUnion( [NotNull] ShapedQueryExpression source1, [NotNull] ShapedQueryExpression source2);
protected abstract ShapedQueryExpression TranslateLeftJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector);
protected abstract ShapedQueryExpression TranslateWhere( [NotNull] ShapedQueryExpression source, [NotNull] LambdaExpression predicate);
protected abstract ShapedQueryExpression TranslateOfType(ShapedQueryExpression source, Type resultType);
protected abstract ShapedQueryExpression TranslateContains(ShapedQueryExpression source, Expression item);
protected abstract ShapedQueryExpression TranslateReverse(ShapedQueryExpression source);
protected abstract ShapedQueryExpression TranslateDefaultIfEmpty(ShapedQueryExpression source, Expression defaultValue);
protected abstract ShapedQueryExpression TranslateSelectMany(ShapedQueryExpression source, LambdaExpression selector);
protected abstract ShapedQueryExpression TranslateDistinct(ShapedQueryExpression source);
protected abstract ShapedQueryExpression TranslateSkipWhile(ShapedQueryExpression source, LambdaExpression predicate);
protected abstract ShapedQueryExpression TranslateElementAtOrDefault(ShapedQueryExpression source, Expression index, bool returnDefault);
protected abstract ShapedQueryExpression TranslateTake(ShapedQueryExpression source, Expression count);
protected abstract ShapedQueryExpression TranslateDefaultIfEmpty( [NotNull] ShapedQueryExpression source, [CanBeNull] Expression defaultValue);