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); }
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()); }
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); }