星空网 > 软件开发 > ASP.net

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

 

所谓的动态排序是指支持任意字段、任意升序降序的排序。我们希望在客户端按如下格式写:

localhost:8000/api/items?sort=title
localhost:8000/api/items?sort=name,title
localhost:8000/api/items?sort=-name,title

字段前面加-表示降序,否则是升序。

接下来要做的就是解析查询字符串中的字段,组成排序的表达式树作为OrderBy方法的实参。

首先安装如下:

install-package system.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;  }}

 

在controller下的action中,大致这样使用:

 

public IHttpActionResult Get(string sort="id"){  try  {    var items = _repo.GetItems();        var result = items      .ApplySort(sort)      .ToList()      .Select(e => ItemFactory.ConvertToViewModel(e));        return OK(result);  }  catch(Exception)  {    //TODO:处理异常  }}

 




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

关键词:排序

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

fba物流怎么样:https://www.goluckyvip.com/tag/20149.html
开发信标题:https://www.goluckyvip.com/tag/2015.html
fba物流专线:https://www.goluckyvip.com/tag/20150.html
fba物流专员:https://www.goluckyvip.com/tag/20151.html
fba物流庄家:https://www.goluckyvip.com/tag/20152.html
fba西班牙:https://www.goluckyvip.com/tag/20153.html
83万单,Halara的TikTok美国小店爆单思路拆解:https://www.goluckyvip.com/news/186217.html
携程高铁旅游攻略,更优惠的高铁票价都在哪里:https://www.vstour.cn/a/362188.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流