示例#1
0
        public static IOrderedQueryable <T> Sorting <T>(this IQueryable <T> list, SortParameterCollection sc, IFilterSortPropResolver propResolver) where T : class, new()
        {
            foreach (var par in sc)
            {
                return(((IOrderedQueryable <T>)InvokeSortParameterOnQueryableFirst <T>(list, par, propResolver)).Sorting(sc, propResolver, true));
            }

            if (sc.DefaultOrder != null)
            {
                foreach (var par in sc.DefaultOrder)
                {
                    return(((IOrderedQueryable <T>)InvokeSortParameterOnQueryableFirst <T>(list, par, propResolver)).Sorting(sc.DefaultOrder, propResolver, true));
                }
            }

            return(list.OrderBy <T, int>(m => 1));
        }
示例#2
0
        public static IOrderedQueryable Sorting(this IQueryable list, SortParameterCollection sc, Type type)
        {
            var minfo = typeof(SortLinqExtension).GetGenericMethod("Sorting", new Type[] { typeof(IQueryable <>), typeof(SortParameterCollection) });

            return(minfo.MakeGenericMethod(type).Invoke(null, new object[] { list, sc }) as IOrderedQueryable);
        }
示例#3
0
 public static IOrderedQueryable <T> Sorting <T>(this IOrderedQueryable <T> list, SortParameterCollection sc) where T : class, new()
 {
     return(Sorting <T>(list, sc, sc.PropertyNameResolver, false));
 }
示例#4
0
 public static IOrderedQueryable <T> Sorting <T>(this IOrderedQueryable <T> list, SortParameterCollection sc, IFilterSortPropResolver propResolver) where T : class, new()
 {
     return(Sorting <T>(list, sc, propResolver, false));
 }
示例#5
0
        private static IOrderedQueryable <T> Sorting <T>(this IOrderedQueryable <T> list, SortParameterCollection sc, IFilterSortPropResolver propResolver, bool skipFirst) where T : class, new()
        {
            IOrderedQueryable <T> result = list;

            foreach (var par in sc.Skip(skipFirst ? 1 : 0))
            {
                result = (IOrderedQueryable <T>)InvokeSortParameterOnQueryableNext <T>(result, par, propResolver);
            }

            if (sc.DefaultOrder != null)
            {
                foreach (var par in sc.DefaultOrder)
                {
                    if (sc.Any(p => p.Type == typeof(T) && p.ColumnName == par.ColumnName) == false)
                    {
                        result = (IOrderedQueryable <T>)InvokeSortParameterOnQueryableNext <T>(result, par, propResolver);
                    }
                }
            }

            return(result);
        }