private static (GraphQueryableField field, int index) ParseField(string queryString, int startingIndex) { var(fieldName, index) = ParseWord(queryString, startingIndex); GraphQueryableField field = new GraphQueryableScalar(fieldName); IEnumerable <GraphQueryableArgument> arguments = null; while (index < queryString.Length) { var character = queryString[index]; if (character == '{') { var(@object, newIndex) = ParseObject(queryString, index); @object.Name = fieldName; if (arguments != null) { foreach (var argument in arguments) { @object.AddArgument(argument); } } return(@object, newIndex); } else if (character == '(') { if (arguments != null) { throw new Exception($"Unexpected character: Found wrong character at {index}"); } var(parsedArguments, newIndex) = ParseArguments(queryString, index); arguments = parsedArguments; index = newIndex; } else if (char.IsLetter(character) || character == ',' || character == '}') { // Missing arguments in field return(character == ',' ? (field, index + 1) : (field, index)); } else if (!char.IsSeparator(character)) { throw new Exception($"Unexpected character: Found wrong character at {index}"); } index++; } throw new Exception($"End-of-string: Cannot parse word at {startingIndex}"); }
public IGraphQueryableObject <TEntity> AddScalar <TProperty>(Expression <Func <TEntity, TProperty> > navigationFcn) { if (navigationFcn == null) { throw new ArgumentNullException(nameof(navigationFcn)); } var propertyName = GetPropertyNameFromExpression(navigationFcn); _fields[propertyName] = new GraphQueryableScalar(propertyName); return(this); }
internal IGraphQueryableObject <TEntity> AddScalar(GraphQueryableScalar scalar) { _fields.Add(scalar.Name, scalar); return(this); }