// Mutation should be null UNLESS adding a mutation at the schema level internal GraphQLFieldBuilder <TContext, TField> AddListFieldInternal <TArgs, TField>(string name, Func <TArgs, Expression <Func <TContext, TEntity, IEnumerable <TField> > > > exprFunc) { var field = GraphQLField.New(_schema, name, exprFunc, typeof(IEnumerable <TField>), _type); _type.OwnFields.Add(field); return(new GraphQLFieldBuilder <TContext, TField>(field)); }
// unsafe generic magic to create a GQLField instance private GraphQLField CreateGenericField(PropertyInfo prop) { // build selector expression, e.g.: (db, p) => p.Id var entityParam = Expression.Parameter(typeof(TEntity), "p"); var memberExpr = Expression.MakeMemberAccess(entityParam, prop); var lambda = Expression.Lambda(memberExpr, GraphQLSchema <TContext> .DbParam, entityParam); // build args func wrapping selector expression, e.g. o => (db, p) => p.Id var objectParam = Expression.Parameter(typeof(object), "o"); var argsExpr = Expression.Lambda(Expression.Quote(lambda), objectParam); var exprFunc = argsExpr.Compile(); return(GraphQLField.New(_schema, prop.Name.ToCamelCase(), (Func <object, LambdaExpression>)exprFunc, prop.PropertyType, _type)); }