.NET CORE中 根据指定列名OrderBy任意字段

hacker5402 2017-12-22 11:20:01


//orderBy 要排序的列名
public ResultDto<UserRoleDto> GetPageData(QueryBase queryBase, Expression<Func<UserRoleDto, bool>> queryExp, string orderBy, string orderDir)
{
using (var db = GetDb())
{
var ds = db.Set<UserRoleEntity>();
var result = new ResultDto<UserRoleDto>();
var where = queryExp.Cast<UserRoleDto, UserRoleEntity, bool>();
var isAsc = orderDir.ToLower() != "desc";
int recordsTotal;

//主要就这个 orderExp 想根据orderBy这个列名 获取到对应的exp
//比如orderBy为id 或者 orderBy为LoginName
//现在暂时写的固定的 就是根据id
Expression<Func<UserRoleDto, int>> orderExp = item => item.Id;

var _orderExp = orderExp.Cast<UserRoleDto, UserRoleEntity, int>();

var list = GetQuery(queryBase, ds, _orderExp, where, isAsc, out recordsTotal);
//。。。省略
}
}

public List<T> GetQuery<Tkey>(QueryBase queryBase, DbSet<T> ds, Expression<Func<T, Tkey>> orderExp, Expression<Func<T, bool>> queryExp, bool isAsc, out int totalRecords)
{
if (isAsc)
{
var query = ds.Where(queryExp).OrderBy(orderExp);
totalRecords = query.Count();
var list = query.Skip(queryBase.Start)
.Take(queryBase.Length).ToList();
return list;
}
else
{
var query = ds.Where(queryExp).OrderByDescending(orderExp);
totalRecords = query.Count();
var list = query.Skip(queryBase.Start)
.Take(queryBase.Length).ToList();
return list;
}
}


试了有些方法,有的是.NetCore中不行 但是在..Net Framework中可以
之后又找到个这个方法,但是 实际运行会提示object类型不对什么的

var propType = typeof(UserRoleDto).GetProperty(orderBy).PropertyType;
if (propType == typeof(string))
{
var prop = typeof(UserRoleDto).GetProperty(orderBy);
//用GetValue方法 获取到的是Object
Expression<Func<UserRoleDto, string>> orderExp = item => (string)prop.GetValue(item, null);

var _orderExp = orderExp.Cast<UserRoleDto, UserRoleEntity, string>();
var list = GetQuery(queryBase, ds, _orderExp, where, isAsc, out recordsTotal);
result.data = MapTo<List<UserEntity>, List<UserDto>>(list);
}
...全文
1011 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧