我有这段简单的代码
public ActionResult ListToGrid(string field, string direction)
{
_model.MyList = _repo.List();
}
要排序,我可以这样做:
_model.MyList = _employeeService.List().OrderBy(x => x.FirstName).ToList<Employee>();
但是我想在参数中使用“as field”作为名称接收(字段)以及收到的方向。
谢谢,
答案 0 :(得分:2)
你可以使用反射,但那会很慢。最有效的方法是声明要在排序中使用的委托,并根据字符串分配函数:
Func<Employee,string> order;
switch (field) {
case "FirstName": order = x => x.FristName;
case "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>();
答案 1 :(得分:1)
搜索谈论动态LINQ表达式的网站。例如,这个显示了如何进行动态排序:
http://blogs.sftsrc.com/stuart/archive/2009/02/19/130.aspx
您还可以根据方向参数选择是否拨打OrderBy
或OrderByDescending
。