示例#1
0
        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());
        }