Webグリッドヘルパーを汎用リポジトリと組み合わせて使用して、列の並べ替えを追加しようとしています。グリッドヘルパーを使用したビューからのアクション結果には、並べ替え列(文字列)のパラメーターがあります。私のジェネリックメソッドシグネチャでは、ドメインモデルのプロパティ名に基づいてラムダ式を渡す必要があります(以下を参照)。
public IEnumerable<T>GetAllPagingAndSorting<TKey>(out int totalRecords,
int pageSize, int pageIndex, Expression<Func<T, TKey>> orderingKey,
SortDirection sortOrder,
params Expression<Func<T, object>>[] includes)
{}
たとえば、「Name」のプロパティ名と「string」のタイプをm=>m.Nameにマップしたいとします。
次のように辞書を使用しようとしましたが、型がint、stringなどではなくオブジェクトになっているため、リポジトリメソッドを呼び出すとエラーがスローされます。
private IDictionary<string,Expression<Func<MyModel,object>>> _orderings =
new Dictionary<string, Expression<Func<MyModel,object>>>
{
{"Id",(m=>m.Id)},
{"Name",m=>m.UserName},
{"DateRequired",m=>m.DateRequired},
{"AssignedTo",m=>m.TeamMember.MemberName},
{"RequestedBy",m=>m.RequestedBy},
};
代わりにメソッドを使用する必要がありますか?どちらの場合でも、上記を使用して入力プロパティを照合し、正しいタイプのLambda式を返すにはどうすればよいですか?
更新:これがコントローラーでの私のアクションです....汎用リポジトリーを使用しているので、ここで注文キーをLambdaとして取得しようと思いました...
定義された汎用respoitoryメソッド:IEnumerable GetAllPagingAndSorting(out int totalRecords、int pageSize、int pageIndex、Expression> orderingKey、SortDirection sortOrder、params Expression> [] include);
public ActionResult ServerPagingAndSorting(int page = 1, string sort = "Id", string sortDir = "Ascending")
{
int totalRecords;
var viewModel =new SupportRequestsIndexVM(supportrequestRepository.GetAllPagingAndSorting(out totalRecords, PageSize,page - 1,_orderings[sort] ,GetSortDirection(sortDir),(m=>m.TeamMember)))
{PageSize = PageSize, PageNumber = page, TotalRows = totalRecords};
return View(viewModel);
}