我正在尝试将 Web 网格助手与通用存储库结合使用来添加列排序。带有网格助手的视图的操作结果具有用于排序列(字符串)的参数。在我的通用方法签名中,我需要根据域模型的属性名称传入一个 lambda 表达式(见下文)。
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,因为我使用通用存储库......
定义的通用存储方法: IEnumerable GetAllPagingAndSorting(out int totalRecords, int pageSize, int pageIndex,Expression> orderingKey, SortDirection sortOrder, params Expression>[] 包括);
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);
}