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