C# 在参数中使用字段名对IList排序
我有一段简单的代码C# 在参数中使用字段名对IList排序,c#,linq,lambda,C#,Linq,Lambda,我有一段简单的代码 public ActionResult ListToGrid(string field, string direction) { _model.MyList = _repo.List(); } 要排序,我可以执行以下操作: _model.MyList = _employeeService.List().OrderBy(x => x.FirstName).ToList<Employee>(); \u model.MyList=\u employee
public ActionResult ListToGrid(string field, string direction)
{
_model.MyList = _repo.List();
}
要排序,我可以执行以下操作:
_model.MyList = _employeeService.List().OrderBy(x => x.FirstName).ToList<Employee>();
\u model.MyList=\u employeeService.List().OrderBy(x=>x.FirstName.ToList();
但我想在参数中使用“as field”这个名称receive(field)和receive的方向
谢谢,搜索有关动态LINQ表达式的网站。例如,此示例显示了如何进行动态排序:
然后,您还可以根据方向参数选择是调用
OrderBy
还是OrderByDescending
。您可以使用反射,但这将非常缓慢。最有效的方法是声明要在排序中使用的委托,并根据字符串分配函数:
Func<Employee,string> order;
switch (field) {
case "FirstName": order = x => x.FristName;
case "LastName": order = x => x.LastName;
}
Func顺序;
开关(现场){
案例“FirstName”:order=x=>x.FristName;
案例“LastName”:order=x=>x.LastName;
}
对于方向,我认为最好使用单独的代码:
var list = _employeeService.List();
IEnumerable<employee> sorted;
if (direction == "ascending") {
sorted = list.OrderBy(order);
} else {
sorted = list.OrderByDescending(order);
}
_model.List = sorted.ToList<Employee>();
var list=\u employeeService.list();
可数排序;
如果(方向=“上升”){
排序=list.OrderBy(订单);
}否则{
排序=list.OrderByDescending(顺序);
}
_model.List=sorted.ToList();
你能举个例子吗,如何将“订单”与_model.MyList一起使用它是IList。。。。谢谢,_model.MyList.OrderBy(order)返回一个IEnumerable。