你的位置:首页 > 软件开发 > ASP.net > 写一个针对IQueryableT的扩展方法支持动态排序

写一个针对IQueryableT的扩展方法支持动态排序

发布时间:2016-01-21 16:00:11
所谓的动态排序是指支持任意字段、任意升序降序的排序。我们希望在客户端按如下格式写:localhost:8000/api/items?sort=titlelocalhost:8000/api/items?sort=name,titlelocalhost:8000/api/items ...

 

所谓的动态排序是指支持任意字段、任意升序降序的排序。我们希望在客户端按如下格式写:localhost:8000/api/items?sort=title字段前面加-表示降序,否则是升序。接下来要做的就是解析查询字符串中的字段,组成排序的表达式树作为OrderBy方法的实参。首先安装如下:install-package system.get='_blank'>linq.dynamic写一个针对IQueryable<T>,返回IQueryable<T>类型的扩展方法:

 

using System.Linq.Dynamic;public static class IQueryableExtensions{  public static IQueryable<T> ApplySort<T>(this IQueryable<T> source, string sort)  {    if(source == null)    {      throw new ArgumentNullException("source");    }        if(sort == null)    {      return source;    }        //把以逗号分隔的排序字符串放数组中    var listSort = sort.Split(',');        string completeSortExpression = "";    foreach(var sortOption in listSort)    {      //如果排序字段以-开头就降序,否则升序      if(sortOption.StartsWith("-"))      {        completeSortExpression = sortOption.Remove(0, 1) + " descending,";      }      else      {        completeSortExpression = completeSortExpression + sortOption + ",";      }    }        if(!string.IsNullOrWhiteSpace(completeSortExpression))    {      source = source.OrderBy(completeSortExpression        .Remove(completeSortExpression.Count()-1));    }        return sort;  }}

原标题:写一个针对IQueryableT的扩展方法支持动态排序

关键词:排序

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。