Example #1
0
        /// <summary>
        /// log sort field
        /// </summary>
        /// <param name="sortField"></param>
        /// <param name="key"></param>
        /// <param name="prefixLogBuilder"></param>
        /// <param name="suffixLogBuilder"></param>
        /// <param name="currentSort"></param>
        /// <param name="exp"></param>
        private void LogSortField(string sortField, string key, StringBuilder prefixLogBuilder, StringBuilder suffixLogBuilder,
                                  RSqlSort <T> currentSort, ExpressionValue exp)
        {
            if (!_logger.IsEnabled(LogLevel.Debug))
            {
                return;
            }

            var sort = currentSort.IsDescending ? "desc" : "asc";

            prefixLogBuilder?.Append($"{sortField}={key};{sort},");
            var sort2 = currentSort.IsDescending ? "OrderByDescending" : "OrderBy";

            suffixLogBuilder?.Append($"{sort2}({exp.Expression}) && ");
        }
Example #2
0
 /// <summary>
 ///     Initializes a new instance of the <see cref="T:RSql4Net.Models.Paging.Pageable`1" /> class.
 /// </summary>
 /// <param name="pageNumber">Page number.</param>
 /// <param name="pageSize">Page size.</param>
 /// <param name="rSqlSort">Sort.</param>
 public RSqlPageable(int pageNumber, int pageSize, RSqlSort <T> rSqlSort = null)
 {
     _pageNumber = pageNumber;
     if (_pageNumber < 0)
     {
         throw new InvalidPageNumberValueException(_pageNumber);
     }
     _pageSize = pageSize;
     if (_pageSize <= 0)
     {
         throw new InvalidPageSizeValueException(_pageSize);
     }
     _rSqlSort = rSqlSort
     ;
 }
Example #3
0
        /// <summary>
        ///     Gets the sort.
        /// </summary>
        /// <returns>The sort.</returns>
        /// <param name="queryCollection">Query collection.</param>
        public RSqlSort <T> GetSort(IQueryCollection queryCollection)
        {
            var sortField = _options.Value.JsonSerializerOptions.PropertyNamingPolicy.ConvertName(_settings.SortField);

            if (queryCollection.TryGetValue(sortField, out var sortStringValues))
            {
                StringBuilder prefixLogBuilder = null;
                StringBuilder suffixLogBuilder = null;
                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    prefixLogBuilder = new StringBuilder();
                    suffixLogBuilder = new StringBuilder();
                }

                var          parameter   = Expression.Parameter(typeof(T));
                RSqlSort <T> currentSort = null;
                foreach (var(key, isDescending) in ExtractSortFromQueryCollection(sortStringValues))
                {
                    if (!ExpressionValue.TryParse <T>(parameter, key,
                                                      _options.Value.JsonSerializerOptions.PropertyNamingPolicy,
                                                      out var exp))
                    {
                        throw new UnknownSortException(key);
                    }

                    var expression      = Expression.Convert(exp.Expression, typeof(object));
                    var orderExpression = Expression.Lambda <Func <T, object> >(expression, parameter);
                    var newSort         = new RSqlSort <T>()
                    {
                        Value = orderExpression, IsDescending = isDescending, Previous = currentSort
                    };

                    if (currentSort != null)
                    {
                        currentSort.Next = newSort;
                    }

                    currentSort = newSort;

                    LogSortField(sortField, key, prefixLogBuilder, suffixLogBuilder, currentSort, exp);
                }

                LogSort(prefixLogBuilder, suffixLogBuilder);
                return(currentSort?.Root);
            }

            return(null);
        }