17,740
社区成员
发帖
与我相关
我的任务
分享
//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;
}
}
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);
}