2
我需要一点帮助来创建一个从dbcontext获取数据并传递'orderby'子句作为参数的通用方法。动态表达式通过子句
到目前为止,有管理的做到这一点:
public virtual Task<List<T>> GetListAsync(Expression<Func<T, object>> orderby, bool asc = true)
{
IQueryable<T> dbQuery = _dbContext.Set<T>();
if (orderby != null)
{
UnaryExpression UnExp = (UnaryExpression)orderby.Body;
MemberExpression Exp = (MemberExpression)UnExp.Operand;
var propInfo = (PropertyInfo)Exp.Member;
//need new sort expression
dbQuery = asc ? dbQuery.OrderBy(orderby) : dbQuery.OrderByDescending(orderby);
}
return dbQuery.ToListAsync<T>();
}
在我需要帮助的部分是如何转换
Expression<Func<T, object>> orderby
到
Expression<Func<T, "propInfo.PropertyType">> sortExpression
在runtime.I希望避免只为排序表达式发送额外的类型。
Expression<Func<T, TKey>> orderby
随着当前实现与字符串参数 像
var data = await GetListAsync(it => it.Name);
但如果我尝试通过INT参数排序
var data = await GetListAsync(it => it.Id);
抛出exception.Is什么我想没问题实现?任何帮助和建议表示赞赏。 感谢
建议:将您的解决方案作为答案,以便该问题不会显示为“未答复”。你也可以通过这种方式得到赞扬。 – DarkWanderer