如何在OrderBy中,使用动态栏位。

以下是一段完整的处理分页和排序的Action。

public IActionResult GetValues(PageSortDTO pageSortDTO)        {            var data = db.Landmarks.AsQueryable();            var totalConut = data.Count();            if (!string.IsNullOrEmpty(pageSortDTO.SortKey))            {                                if (pageSortDTO.Direction == "asc")                {                    if (pageSortDTO.SortKey == "Id")                    {                        data = data.OrderBy(e => e.Id);                    }                    else if (pageSortDTO.SortKey == "Name")                    {                        data = data.OrderBy(e => e.Name);                    }                }                else                {                    if (pageSortDTO.SortKey == "Id")                    {                        data = data.OrderBy(e => e.Id);                    }                    else if (pageSortDTO.SortKey == "Name")                    {                        data = data.OrderBy(e => e.Name);                    }                }            }            var pagedData = data            .Skip(pageSortDTO.PageSize * pageSortDTO.PageIndex)            .Take(pageSortDTO.PageSize).ToList();            return Ok(new            {                Values = pagedData,                TotalCount = totalConut            });

PageSortDTO中的属性值:

public int PageIndex { get; set; } //第几页public int PageSize { get; set; } //一页有几笔资料public string SortKey { get; set; } //要排序的栏位public string Direction { get; set; } //降幂或升幂

这几段处理排序的程式码比较不漂亮的地方在于,必须依照排序的栏位写if else判断式,若栏位一多,整段程式码将会又臭又长。

这时我们可以将if (!string.IsNullOrEmpty(pageSortDTO.SortKey))判断式的内容改写成:

var param = pageSortDTO.SortKey;var propertyInfo = typeof(Landmark).GetProperty(param);if (pageSortDTO.Direction == "asc"){    data = data.OrderBy(e => propertyInfo.GetValue(e, null));}else if (pageSortDTO.Direction == "desc"){    data = data.OrderByDescending(e => propertyInfo.GetValue(e, null));}

完成OrderBy动态栏位排序。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章