/// <summary>
 /// Groups the elements of a sequence according to a specified key selector function.
 /// </summary>
 /// <param name="source"> An <see cref="IQueryable" /> whose elements to group.</param>
 /// <param name="keySelector"> A function to extract the key for each element.</param>
 /// <returns>
 /// An <see cref="IQueryable"/> with <see cref="IGrouping{TKey,TElement}"/> items, 
 /// whose elements contains a sequence of objects and a key.
 /// </returns>
 public static IQueryable GroupBy(this IQueryable source, LambdaExpression keySelector)
 {
     return source.CallQueryableMethod("GroupBy", keySelector);
 }
 /// <summary>
 /// Sorts the elements of a sequence in descending order according to a key.
 /// </summary>
 /// <returns>
 /// An <see cref="IQueryable" /> whose elements are sorted in descending order according to a key.
 /// </returns>
 /// <param name="source">
 /// A sequence of values to order.
 /// </param>
 /// <param name="keySelector">
 /// A function to extract a key from an element.
 /// </param>
 public static IQueryable OrderByDescending(this IQueryable source, LambdaExpression keySelector)
 {
     return source.CallQueryableMethod("OrderByDescending", keySelector);
 }
 /// <summary>
 /// Projects each element of a sequence into a new form.
 /// </summary>
 /// <returns>
 /// An <see cref="IQueryable" /> whose elements are the result of invoking a 
 /// projection selector on each element of <paramref name="source" />.
 /// </returns>
 /// <param name="source"> A sequence of values to project. </param>
 /// <param name="selector"> A projection function to apply to each element. </param>
 public static IQueryable Select(this IQueryable source, LambdaExpression selector)
 {
     return source.CallQueryableMethod("Select", selector);
 }