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); }
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() });