asp.net 4.0 Web アプリで JqGrid を使用していますが、列の並べ替えを実装したいと考えています。私の問題は、レポ クラスの Get メソッドには、パラメーターによる並べ替えの Expression> タイプが必要なことです。
public IEnumerable<TEntity> Get<TOrderBy>(Expression<Func<TEntity, bool>> predicate, Expression<Func<TEntity, TOrderBy>> orderBy, int pageIndex, int pageSize, out int totalNumberOfRecords, SortOrder sortOrder = SortOrder.Ascending)
{
IEnumerable<TEntity> list = null;
int numberOfRecordsToSkip = CalculateNumberOfRecordsToSkip(pageIndex, pageSize);
if (sortOrder == SortOrder.Ascending)
{
list = GetQuery().Where(predicate).OrderBy(orderBy).Skip(numberOfRecordsToSkip).Take(pageSize).AsEnumerable().ToList();
}
else
{
list = GetQuery().Where(predicate).OrderByDescending(orderBy).Skip(numberOfRecordsToSkip).Take(pageSize).AsEnumerable().ToList();
}
totalNumberOfRecords = GetQuery().Count(predicate);
return list;
}
コンパイル時にエンティティの型しかわかっていない場合、その式による並べ替えを作成するにはどうすればよいですか? 任意の列 (または必要に応じてエンティティ プロパティ) でグリッドを並べ替えられるようにしたいと考えています。
式による並べ替えを作成するメソッドは、1 つのパラメーターを取り、それが列名です。
public Expression<Func<TEntity, TOrderBy>> CreateOrderByExpression(string sortColumn)
{
// I don't know the TOrderBy type before this method is called. I know the TEntity type // so getting the type of the sortColumn is easy.
// But how do I create the Expression<Func<TEntity, TOrderBy>> from here ?
}
したがって、CreateOrderByExpression メソッドの結果は、レポ クラスの Get メソッドのパラメーターとして使用する必要があります。
何か提案はありますか?