public Expression Build(
            string searchParameterName,
            SearchModifierCode?modifier,
            SearchComparator comparator,
            int?componentIndex,
            ISearchValue searchValue)
        {
            EnsureArg.IsNotNullOrWhiteSpace(searchParameterName, nameof(searchParameterName));
            Debug.Assert(
                modifier == null || Enum.IsDefined(typeof(SearchModifierCode), modifier.Value),
                "Invalid modifier.");
            Debug.Assert(
                Enum.IsDefined(typeof(SearchComparator), comparator),
                "Invalid comparator.");
            EnsureArg.IsNotNull(searchValue, nameof(searchValue));

            _searchParameterName = searchParameterName;
            _modifier            = modifier;
            _comparator          = comparator;
            _componentIndex      = componentIndex;

            searchValue.AcceptVisitor(this);

            return(_outputExpression);
        }
Exemple #2
0
 private SearchCondition(string searchKey, string searchValue, SearchComparator comparator, SearchType comparaType)
 {
     this.searchKey   = searchKey;
     this.searchValue = searchValue;
     this.comparator  = comparator;
     this.comparaType = comparaType;
 }
Exemple #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            Console.WriteLine("[Formatting the words entered...]");

            /* Formatting all words from the given parameters */
            var wordsToSearch = SearchUtil.PrepareWordsToSearch(args);

            Console.WriteLine("[Do some validations...]");

            /* Validate the parameters entered*/
            if (SearchUtil.DoValidate(wordsToSearch))
            {
                Console.WriteLine("[Executing Search Engine...]");

                /* Using the Comparator class for performing the comparisson */
                var Comparator = new SearchComparator(wordsToSearch);
                Comparator.Run();

                SearchUtil.DisplayResults(Comparator);
            }

            Console.ReadLine();
        }
Exemple #4
0
        private Expression Build(
            SearchParameterInfo searchParameter,
            SearchModifierCode?modifier,
            int?componentIndex,
            string value)
        {
            ReadOnlySpan <char> valueSpan = value.AsSpan();

            // By default, the comparator is equal.
            SearchComparator comparator = SearchComparator.Eq;

            if (searchParameter.Type == ValueSets.SearchParamType.Date ||
                searchParameter.Type == ValueSets.SearchParamType.Number ||
                searchParameter.Type == ValueSets.SearchParamType.Quantity)
            {
                // If the search parameter type supports comparator, parse the comparator (if present).
                Tuple <string, SearchComparator> matchedComparator = SearchParamComparators.FirstOrDefault(
                    s => value.StartsWith(s.Item1, StringComparison.Ordinal));

                if (matchedComparator != null)
                {
                    comparator = matchedComparator.Item2;
                    valueSpan  = valueSpan.Slice(matchedComparator.Item1.Length);
                }
            }

            // Parse the value.
            Func <string, ISearchValue> parser = _parserDictionary[Enum.Parse <SearchParamType>(searchParameter.Type?.ToString())];

            // Build the expression.
            var helper = new SearchValueExpressionBuilderHelper();

            // If the value contains comma, then we need to convert it into in expression.
            // But in this case, the user cannot specify prefix.
            IReadOnlyList <string> parts = value.SplitByOrSeparator();

            if (parts.Count == 1)
            {
                // This is a single value expression.
                ISearchValue searchValue = parser(valueSpan.ToString());

                return(helper.Build(
                           searchParameter.Name,
                           modifier,
                           comparator,
                           componentIndex,
                           searchValue));
            }
            else
            {
                if (comparator != SearchComparator.Eq)
                {
                    throw new InvalidSearchOperationException(Core.Resources.SearchComparatorNotSupported);
                }

                // This is a multiple value expression.
                Expression[] expressions = parts.Select(part =>
                {
                    ISearchValue searchValue = parser(part);

                    return(helper.Build(
                               searchParameter.Name,
                               modifier,
                               comparator,
                               componentIndex,
                               searchValue));
                }).ToArray();

                return(Expression.Or(expressions));
            }
        }
Exemple #5
0
 public static SearchCondition CreateSearchCondition(string searchKey, string searchValue, SearchComparator comparator, SearchType comparaType)
 {
     return(new SearchCondition(searchKey, searchValue, comparator, comparaType));
 }