private static IQueryable CallQueryableMethod(this IQueryable source, string methodName, LambdaExpression selector)
{
IQueryable query = source.Provider.CreateQuery(
Expression.Call(
typeof(Queryable),
methodName,
new[] { source.ElementType, selector.Body.Type },
source.Expression,
Expression.Quote(selector)));
return query;
}