public string Build() { var sb = new StringBuilder(); sb.Append($"{_name}:"); sb.Append(" "); if (_list) { sb.Append("["); } sb.Append(_type.ToString().ToLowerInvariant()); if (_list) { sb.Append("]"); } if (_index) { sb.Append(" "); sb.Append("@index"); if (_type == PredicateType.String) { var selected = Enum .GetValues(typeof(StringIndexType)) .Cast <StringIndexType>() .Where(v => _stringIndexType.HasFlag(v)) .Select(x => x.ToString().ToLowerInvariant()); var selectedStr = string.Join(", ", selected); sb.Append("("); sb.Append(selectedStr); sb.Append(")"); } else if (_type == PredicateType.DateTime) { sb.Append("("); sb.Append(_dateTimeIndexType.ToString().ToLowerInvariant()); sb.Append(")"); } else { sb.Append("("); sb.Append(_type.ToString().ToLowerInvariant()); sb.Append(")"); } } if (_count) { sb.Append(" "); sb.Append("@count"); } if (_upsert) { sb.Append(" "); sb.Append("@upsert"); } sb.Append(" "); sb.Append("."); return(sb.ToString()); }