Example #1
0
        public void Add(ISortInfo info)
        {
            var exists = _sortRuleCatalog.TryGetValue(info.Property, out var predicate);

            if (!exists)
            {
                // TODO Log warning? throw exception to log a warning?
            }
            else
            {
                Add(predicate, info.Direction);
            }
        }
        public static IQueryable <T> Sort <T>(this IQueryable <T> source, ISortInfo sortInfo)
        {
            if (sortInfo._sort != null)
            {
                IOrderedQueryable <T> query;
                var sortArray  = sortInfo._sort.Split(',').Select(p => p.Trim()).ToArray();
                var orderArray = sortInfo._order == null ? null :
                                 sortInfo._order.Split(',').Select(p => p.Trim()).ToArray();

                if (orderArray != null && orderArray.First() == "desc")
                {
                    query = source.OrderByDescending(ExpressionForSort <T>(sortArray.First()));
                }
                else
                {
                    query = source.OrderBy(ExpressionForSort <T>(sortArray.First()));
                }

                var i = 1;
                foreach (var sort in sortArray.Skip(1))
                {
                    if (orderArray != null && orderArray.Count() > i && orderArray[i] == "desc")
                    {
                        query = query.ThenByDescending(ExpressionForSort <T>(sort));
                    }
                    else
                    {
                        query = query.ThenBy(ExpressionForSort <T>(sort));
                    }
                    i++;
                }

                return(query);
            }
            return(source);
        }
Example #3
0
        public static Task <List <TDto> > ToListAsync <TEntity, TDto>(this IQueryable <TEntity> source, ISortInfo sort, string defaultSort = null)
            where TEntity : class
        {
            var data = source.ProjectTo <TDto>().OrderBy(sort, defaultSort);

            return(data.ToListAsync());
        }
Example #4
0
        public static IQueryable <TEntity> OrderBy <TEntity>(this IQueryable <TEntity> source, ISortInfo sort, string defaultSort = null)
        {
            var sortFields = sort?.SortFields?.Where(p => !string.IsNullOrEmpty(p))
                             .Select(p => p.StartsWith("+") ? (p.TrimStart('+') + " ASC") : p.StartsWith("-") ? (p.TrimStart('-') + " DESC") : p).ToArray();

            if (sortFields != null && sortFields.Length > 0)
            {
                source = source.OrderBy(string.Join(" , ", sortFields));
            }
            else if (!string.IsNullOrEmpty(defaultSort))
            {
                source = source.OrderBy(defaultSort);
            }

            return(source);
        }