using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace CloudBuilder.Core.Extensions { /// /// 列表字段排序条件 /// public class SortCondition { /// /// 初始化一个类型的新实例 /// public SortCondition() : this(null) { } /// /// 构造一个指定字段名称的升序排序的排序条件 /// /// 字段名称 public SortCondition(string sortField) : this(sortField, ListSortDirection.Ascending) { } /// /// 构造一个排序字段名称和排序方式的排序条件 /// /// 字段名称 /// 排序方式 public SortCondition(string sortField, ListSortDirection listSortDirection) { SortField = sortField; ListSortDirection = listSortDirection; } /// /// 获取或设置 排序字段名称 /// public string SortField { get; set; } /// /// 获取或设置 排序方向 /// public ListSortDirection ListSortDirection { get; set; } } /// /// 支持泛型的列表字段排序条件 /// /// 列表元素类型 public class SortCondition : SortCondition { /// /// 使用排序字段 初始化一个类型的新实例 /// public SortCondition(Expression> keySelector) : this(keySelector, ListSortDirection.Ascending) { } /// /// 使用排序字段与排序方式 初始化一个类型的新实例 /// public SortCondition(Expression> keySelector, ListSortDirection listSortDirection) : base(GetPropertyName(keySelector), listSortDirection) { } /// /// 从泛型委托获取属性名 /// private static string GetPropertyName(Expression> keySelector) { string param = keySelector.Parameters.First().Name; string operand = ((dynamic)keySelector.Body).Operand.ToString(); operand = operand.Substring(param.Length + 1, operand.Length - param.Length - 1); return operand; } } }