namespace CrupestApi.Commons.Crud; public class OrderByItem { public OrderByItem(string columnName, bool isAscending) { ColumnName = columnName; IsAscending = isAscending; } public string ColumnName { get; } public bool IsAscending { get; } public string GenerateSql() { return $"{ColumnName} {(IsAscending ? "ASC" : "DESC")}"; } } public interface IOrderByClause : IClause { List Items { get; } // Contains "ORDER BY" keyword! string GenerateSql(string? dbProviderId = null); } public class OrderByClause : IOrderByClause { public List Items { get; } = new List(); public OrderByClause(params OrderByItem[] items) { Items.AddRange(items); } public static OrderByClause Create(params OrderByItem[] items) { return new OrderByClause(items); } public List GetRelatedColumns() { return Items.Select(x => x.ColumnName).ToList(); } public string GenerateSql(string? dbProviderId = null) { return "ORDER BY " + string.Join(", ", Items.Select(i => i.GenerateSql())); } }