public <TKey, TElement, TResult> Queryable<TResult> groupBy(
     FunctionExpression<Function1<T, TKey>> keySelector,
     FunctionExpression<Function1<T, TElement>> elementSelector,
     FunctionExpression<Function2<TKey, Enumerable<TElement>, TResult>> resultSelector,
     EqualityComparer<TKey> comparer) {
   return factory.groupBy(getThis(), keySelector, elementSelector, resultSelector, comparer);
 }
 public <TKey, TElement> Queryable<Grouping<TKey, TElement>> groupBy(
     FunctionExpression<Function1<T, TKey>> keySelector,
     FunctionExpression<Function1<T, TElement>> elementSelector,
     EqualityComparer<TKey> comparer) {
   return factory.groupBy(getThis(), keySelector, elementSelector, comparer);
 }
 public <TKey> Queryable<Grouping<TKey, T>> groupBy(
     FunctionExpression<Function1<T, TKey>> keySelector) {
   return factory.groupBy(getThis(), keySelector);
 }