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); }
private SearchCondition(string searchKey, string searchValue, SearchComparator comparator, SearchType comparaType) { this.searchKey = searchKey; this.searchValue = searchValue; this.comparator = comparator; this.comparaType = comparaType; }
/// <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(); }
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)); } }
public static SearchCondition CreateSearchCondition(string searchKey, string searchValue, SearchComparator comparator, SearchType comparaType) { return(new SearchCondition(searchKey, searchValue, comparator, comparaType)); }