自定义动态列排序

      

故事:业务需求上需要根据用户选定的排序规则,进行业务数据表的多列动态排序

实现方式:

1 定义优先枚举信息

 public enum RuleEnum
 {
     [Description("列01")]
     Col01= 1,
     [Description("列02")]
     Col02= 2,
     [Description("列03")]
     Col03= 3,
     [Description("列04")]
     Col04 = 4,
 }

2 定义动态排序的数组

  public class OptionClickStreamRowDto
  { 
      /// <summary>
      /// 序号
      /// </summary>
     
      public int Ordinal { get; set; }
      /// <summary>
      /// 规则ID
      /// </summary>
      public RuleEnum Rule { get; set; }
      /// <summary>
      /// 规则描述
      /// </summary>
      public string RuleDesc { get; set; }
      /// <summary>
      /// 排序规则
      /// </summary>
      public string Sort { get; set; } = "ASC";
  }

3  引用System.Linq.Dynamic.Core

4 写排序方法

/// <summary>
/// 动态排序
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list">原集合</param>
/// <param name="sorts">排序字符串"a desc,b asc,c asc"</param>
/// <returns></returns>
public static List<T> DynamicSort<T>(List<T> list, string sorts)
{
    return list.AsQueryable().OrderBy(sorts).ToList();
} 

5  准备调用处

//声明排序
var options =new List<OptionClickStreamRowDto>();
//添加排序信息
options.add(new OptionClickStreamRowDto()
{
        Ordinal = 1,
        Rule = RuleEnum.Col1
});
options.add(new OptionClickStreamRowDto()
{
        Ordinal = 2,
        Rule = RuleEnum.Col3,
        Sort = "Descending"
});
//获取排序规则字符串
 string fieldsToSort = "";
//拼接排序字段
 options.ForEach(x =>
 {
     switch (x.Rule)
     {
         case RuleEnum.Col01 :
             fieldsToSort += $",Col01 {x.Sort}";
             break;
         case RuleEnum.Col02:
             fieldsToSort += $",Col02 {x.Sort}";
             break;
         case RuleEnum.Col03:
             fieldsToSort += $",Col03 {x.Sort}";
             break;
         case RuleEnum.Col04:
             fieldsToSort += $",Col04 {x.Sort}";
             break;
     }
 });
 fieldsToSort = fieldsToSort.Substring(1, fieldsToSort.Length - 1);
//调用排序方法
 queryDataList = DynamicSort(queryDataList, fieldsToSort);

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值