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

実行時に.sort式だけに余分な型を送るのは避けたいです。

Expression<Func<T, TKey>> orderby

現在の実装では、次のような文字列パラメーターに問題はありません

 var data = await GetListAsync(it => it.Name);

しかし、intパラメータでソートしようとすると

var data = await GetListAsync(it => it.Id);

例外をスローします。それは私が達成したいことですか? ヘルプやアドバイスをいただければ幸いです。ありがとう

4

1 に答える 1