public void SimpleParametrizedQueryTest()
        {
            var queryBuilder = GetQueryBuilder(@"
                type DrawSchema {
                    id: ID
                    name: String!
                }
                type Query {
                    schemas(productId: Int!): [DrawSchema]
                }");

            var query = new DrawSchema[0]
                        .AsQueryable()
                        .Where(new { productId = 111 });

            var variablesResolver = new VariablesResolver();
            var queryText         = queryBuilder.BuildQuery(query.Expression, variablesResolver, out var entryPoint);

            queryText = PostProcessQuery(queryText);

            Assert.Equal("schemas", entryPoint);
            Assert.Equal("query($linq_param_0: Int!) { schemas(productId: $linq_param_0) { id name } }", queryText);

            var variable = Assert.Single(variablesResolver.GetAllVariables());

            Assert.Equal("linq_param_0", variable.name);
            Assert.Equal(111, variable.value);
        }
        public void ParametrizedSelectQueryTest()
        {
            var queryBuilder = GetQueryBuilder(@"
                type ProductInfo {
                    title: String!
                    version: String!
                }
                type Product {
                    id: ID
                    productInfo: ProductInfo!
                }
                type Query {
                    products: [Product]
                    product(productId: Int!): Product
                }");

            var query = new Product[0]
                        .AsQueryable()
                        .Where(new { productId = 111 })
                        .Select(_ => _.ProductInfo);

            var variablesResolver = new VariablesResolver();
            var queryText         = queryBuilder.BuildQuery(query.Expression, variablesResolver, out var entryPoint);

            queryText = PostProcessQuery(queryText);

            Assert.Equal("product", entryPoint);
            Assert.Equal("query($linq_param_0: Int!) { product(productId: $linq_param_0) { productInfo { title version } } }", queryText);

            var variable = Assert.Single(variablesResolver.GetAllVariables());

            Assert.Equal("linq_param_0", variable.name);
            Assert.Equal(111, variable.value);
        }
Example #3
0
        public object Execute(Expression expression)
        {
            var variablesResolver = new VariablesResolver();
            var query             = queryBuilder.BuildQuery(expression, variablesResolver, out var entryPoint);
            var request           = new GraphQLRequest
            {
                Query     = query,
                Variables = variablesResolver.GetAllVariables().ToDictionary(_ => _.name, _ => _.value)
            };

            var result = Task.Run(() => client.SendQueryAsync <JToken>(request, CancellationToken.None))
                         .GetAwaiter()
                         .GetResult();

            expression = RewriteExpression(expression, result.Data[entryPoint]);

            return(expression switch
            {
                MethodCallExpression method => Expression.Lambda <Func <object> >(method).Compile()(),
                ConstantExpression constant => constant.Value,
                _ => throw new NotImplementedException()
            });