public static OperatorDescriptorBase CreateFilterGroupBody(SearchFilterGroupDescriptor descriptor, string searchText)
        {
            if (descriptor?.Filters?.Any() != true)
            {
                throw new ArgumentException($"{nameof(descriptor.Filters)}: A0AA4935-06AB-47AA-BDD1-B3FCBBF2EFC0");
            }

            if (descriptor.Filters.Count > 2)
            {
                throw new ArgumentException($"{nameof(descriptor.Filters)}: FA8286BD-AA2D-4AB8-9FFD-CC171C98607C");
            }

            return(descriptor.Filters.Count == 2
                ? new OrBinaryOperatorDescriptor
            {
                Left = CreateBody(descriptor.Filters.First()),
                Right = CreateBody(descriptor.Filters.Last())
            }
                : CreateBody(descriptor.Filters.First()));

            OperatorDescriptorBase CreateBody(SearchFilterDescriptorBase filterDescriptorBase)
            => filterDescriptorBase is SearchFilterDescriptor searchFilterDescriptor
                    ? CreateFilterBody(searchFilterDescriptor, searchText)
                    : CreateFilterGroupBody((SearchFilterGroupDescriptor)filterDescriptorBase, searchText);
        }
 public static FilterLambdaOperatorDescriptor CreateFilter(SearchFilterGroupDescriptor descriptor, Type modelType, string searchText)
 => new FilterLambdaOperatorDescriptor
 {
     FilterBody        = CreateFilterGroupBody(descriptor, searchText),
     ParameterName     = parameterName,
     SourceElementType = modelType.AssemblyQualifiedName
 };
 private static OperatorDescriptorBase CreateWhereBody(SearchFilterGroupDescriptor filterGroupDescriptor, string searchText)
 => new WhereOperatorDescriptor
 {
     SourceOperand = new ParameterOperatorDescriptor
     {
         ParameterName = queryParameterName
     },
     FilterBody          = CreateSearchFilterHelper.CreateFilterGroupBody(filterGroupDescriptor, searchText),
     FilterParameterName = filterParameterName
 };
 public SelectorLambdaOperatorDescriptor CreatePagingSelector(SortCollectionDescriptor sortDescriptor, Type modelType, SearchFilterGroupDescriptor filterGroupDescriptor, string searchText)
 => CreatePagingSelectorHelper.CreatePagingSelector(sortDescriptor, modelType, filterGroupDescriptor, searchText);
 public FilterLambdaOperatorDescriptor CreateFilter(SearchFilterGroupDescriptor descriptor, Type modelType, string searchText)
 => CreateSearchFilterHelper.CreateFilter(descriptor, modelType, searchText);
 public static SelectorLambdaOperatorDescriptor CreatePagingSelector(SortCollectionDescriptor sortDescriptor, Type modelType, SearchFilterGroupDescriptor filterGroupDescriptor, string searchText)
 => string.IsNullOrEmpty(searchText)
         ? CreatePagingSelector(sortDescriptor, modelType)
         : GetSelector
 (
     modelType.GetIQueryableTypeString(),
     sortDescriptor,
     CreateWhereBody(filterGroupDescriptor, searchText)
 );