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
実行時に.sort式だけに余分な型を送るのは避けたいです。
Expression<Func<T, TKey>> orderby
現在の実装では、次のような文字列パラメーターに問題はありません
var data = await GetListAsync(it => it.Name);
しかし、intパラメータでソートしようとすると
var data = await GetListAsync(it => it.Id);
例外をスローします。それは私が達成したいことですか? ヘルプやアドバイスをいただければ幸いです。ありがとう