/// <summary> /// Add a filter for the given field path. /// </summary> /// <remarks> /// This call adds additional filters to any previously-specified ones. /// </remarks> /// <param name="fieldPath">The field path to filter on. Must not be null.</param> /// <param name="op">The filter operator.</param> /// <param name="value">The value to compare in the filter.</param> /// <returns>A new query based on the current one, but with the additional specified filter applied.</returns> public Query Where(FieldPath fieldPath, QueryOperator op, object value) { FieldOp queryOp = GetOperator(op); var unaryOperator = GetUnaryOperator(value); Filter filter; if (unaryOperator != UnaryFilter.Types.Operator.Unspecified) { if (queryOp == FieldOp.Equal) { filter = new Filter { UnaryFilter = new UnaryFilter { Field = fieldPath.ToFieldReference(), Op = unaryOperator } }; } else { throw new ArgumentException(nameof(value), "null and NaN values can only be used with the Equal operator"); } } else { var convertedValue = ValueSerializer.Serialize(value); filter = new Filter { FieldFilter = new FieldFilter { Field = fieldPath.ToFieldReference(), Op = queryOp, Value = convertedValue } }; } return(WithFilter(filter)); }
private Query OrderBy(FieldPath fieldPath, Direction direction) { GaxPreconditions.CheckState(QueryProto.StartAt == null && QueryProto.EndAt == null, "All orderings must be specified before StartAt, StartAfter, EndBefore or EndAt are called."); var query = QueryProto.Clone(); query.OrderBy.Add(new Order { Field = fieldPath.ToFieldReference(), Direction = direction }); return(WithQuery(query)); }