Beispiel #1
0
        public static IEnumerable <QueryCondition> ParseQueryConditions(this string query)
        {
            var stringSpan = new StringSpan(query);

            stringSpan.MoveToTheNextStartOfString();

            while (!stringSpan.Eof)
            {
                var fieldName = stringSpan.ReadNextString();


                var operation = stringSpan.ReadOperation();



                if (operation == QueryOperation.In)
                {
                    var value = stringSpan.ReadInValues();

                    yield return(new QueryCondition
                    {
                        FieldName = fieldName,
                        Values = value.ToArray(),
                        Operation = operation
                    });
                }
                else
                {
                    var value = stringSpan.ReadNextString();

                    yield return(new QueryCondition
                    {
                        FieldName = fieldName,
                        Values = value.ToSingleArray(),
                        Operation = operation
                    });
                }

                stringSpan.MoveToTheNextStartOfString();

                if (stringSpan.Eof)
                {
                    break;
                }


                var logicalOperator = stringSpan.ReadNextString();

                if (logicalOperator.ToLower() != "and")
                {
                    throw new Exception("Only and logical operation is supported for a while");
                }
            }
        }
Beispiel #2
0
        private static QueryOperation ReadOperation(this StringSpan src)
        {
            var opString = src.ReadNextString();

            return(opString.ParseQueryOperation());
        }