using PoweredSoft.DynamicLinq.Helpers; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace PoweredSoft.DynamicLinq.Fluent { public class OrderByBuilder : IQueryBuilder { public IQueryable Query { get; } public OrderByBuilder(IQueryable query) { Query = query; } public virtual IQueryable Build() { var query = Query; Sorts.ForEach(sort => { query = QueryableHelpers.CreateOrderByExpression(query, sort.Path, sort.Direction, sort.Append); }); return query; } public List Sorts { get; protected set; } = new List(); public virtual OrderByBuilder OrderBy(string path, QueryOrderByDirection direction, bool append) { if (append == false) Sorts.Clear(); Sorts.Add(new OrderByPart { Path = path, Direction = direction, Append = append }); return this; } #region shortcuts public virtual OrderByBuilder OrderBy(string path) => OrderBy(path, QueryOrderByDirection.Ascending, false); public virtual OrderByBuilder OrderByDescending(string path) => OrderBy(path, QueryOrderByDirection.Descending, false); public virtual OrderByBuilder ThenBy(string path) => OrderBy(path, QueryOrderByDirection.Ascending, true); public virtual OrderByBuilder ThenByDescending(string path) => OrderBy(path, QueryOrderByDirection.Descending, true); #endregion } }