public static IHttpRequest CompileRequest <TResource>(this IQueryable <TResource> urlQuery,
                                                              IHttpRequest relativeTo = default)
        {
            var baseUrl     = BaseUrl(urlQuery);
            var httpRequest = new HttpRequest(baseUrl);

            return(urlQuery.Compile <IHttpRequest, IBuildHttpRequests>(
                       httpRequest,
                       (request, methodAttr, method, methodArguments) =>
            {
                return methodAttr.MutateRequest(request,
                                                method, methodArguments);
            },
                       (request, method, methodArguments) =>
            {
                if (method.Name == "Where")
                {
                    var x = new ResourceQueryExtensions.BinaryComparisonQueryAttribute();
                    return x.MutateRequest(request, method, methodArguments);
                }
                throw new ArgumentException($"Cannot compile Method `{method.DeclaringType.FullName}..{method.Name}`");
            }));
        }
        public static Uri Location <TResource>(this IQueryable <TResource> urlQuery)
        {
            var baseUrl = BaseUrl(urlQuery);

            var queryUrl = urlQuery.Compile <Uri, IBuildUrls>(
                baseUrl,
                (url, attr, method, methodArguments) =>
            {
                var updatedUrl = attr.BindUrlQueryValue(url, method, methodArguments);
                return(updatedUrl);
            },
                (url, method, methodArguments) =>
            {
                if (method.Name == "Where")
                {
                    var x = new ResourceQueryExtensions.BinaryComparisonQueryAttribute();
                    return(x.BindUrlQueryValue(url, method, methodArguments));
                }
                throw new ArgumentException($"Cannot compile Method `{method.DeclaringType.FullName}..{method.Name}`");
            });

            return(queryUrl);
        }