public static IOrderedQueryable <T> Order <T, TOrder>( this IQueryable <T> query, ISortParams sortParams, Expression <Func <T, TOrder> > ordersBy, SortDirs defaultSortDir = SortDirs.Asc) { return(query.Order(sortParams, new[] { ordersBy }, null, defaultSortDir)); }
public static IOrderedQueryable <T> Order <T, TOrder>( this IQueryable <T> query, ISortParams sortParams, IEnumerable <Expression <Func <T, TOrder> > > ordersBy, SortDirs[] sortDirs = null, SortDirs defaultSortDir = SortDirs.Asc) { //Choose between defaults and selected orders string[] _ordersBy = null; SortDirs[] _sortDirs = null; if (sortParams != null && sortParams.SortBy != null && sortParams.SortBy.Any()) { _ordersBy = sortParams.SortBy; _sortDirs = sortParams.SortDir; } else { _ordersBy = ordersBy.Select(o => ExpressionHelper.GetExpressionText(ExpressionHelper.RemoveConvert(o))).ToArray(); _sortDirs = ordersBy.Select((o, i) => sortDirs != null && sortDirs.Where((x, ix) => i == ix).Any() ? sortDirs.Where((x, ix) => i == ix).FirstOrDefault() : defaultSortDir).ToArray(); } //Apply Orders var y = 0; foreach (var o in _ordersBy) { if (y == 0) { query = query.OrderByProperty(o, _sortDirs.ElementAt(y) == SortDirs.Asc); } else { query = ((IOrderedQueryable <T>)query).ThenByProperty(o, _sortDirs.ElementAt(y) == SortDirs.Asc); } y++; } return((IOrderedQueryable <T>)query); }
public SortParams() { SortBy = new string[] { }; SortDir = new SortDirs[] { }; }