public static string Build <TRootObject>(Action <IGraphQueryableObject <TRootObject> > buildFcn) { var configuration = new GraphQueryableObject <TRootObject>(string.Empty); buildFcn(configuration); return(configuration.ToQueryString()); }
public IGraphQueryableObject <TEntity> AddObjectAs <TProperty, TInnerProperty>(Expression <Func <TEntity, TProperty> > navigationFcn, Action <IGraphQueryableObject <TInnerProperty> > innerGraphQueryable) { var propertyName = GetPropertyNameFromExpression(navigationFcn); var newObject = new GraphQueryableObject <TInnerProperty>(propertyName); _fields[propertyName] = newObject; innerGraphQueryable(newObject); return(this); }
private static (GraphQueryableObject <object> @object, int index) ParseObject(string queryString, int startingIndex) { var index = startingIndex; GraphQueryableObject <object> @object = null; while (index < queryString.Length) { var character = queryString[index]; if (@object == null) { if (character == '{') { @object = new GraphQueryableObject <object>(string.Empty); } else if (!char.IsSeparator(character)) { throw new Exception($"Unexpected character: Found wrong character at {index}"); } } else { if (character == '}') { return(@object, index + 1); } else if (character == ',') { var(field, newIndex) = ParseField(queryString, index + 1); if (field is GraphQueryableScalar) { @object.AddScalar((GraphQueryableScalar)field); } else { @object.AddObject((GraphQueryableObject <object>)field); } index = newIndex - 1; } else if (char.IsLetterOrDigit(character)) { var(field, newIndex) = ParseField(queryString, index); if (field is GraphQueryableScalar) { @object.AddScalar((GraphQueryableScalar)field); } else { @object.AddObject((GraphQueryableObject <object>)field); } index = newIndex - 1; } else if (!char.IsSeparator(character)) { throw new Exception($"Unexpected character: Found wrong character at {index}"); } } index++; } throw new Exception($"End-of-string: Cannot parse object at {startingIndex}"); }
internal IGraphQueryableObject <TEntity> AddObject <TObject>(GraphQueryableObject <TObject> @object) { _fields.Add(@object.Name, @object); return(this); }