代码之家  ›  专栏  ›  技术社区  ›  TheBoubou codingbadger

用参数中的字段名排序IList

  •  2
  • TheBoubou codingbadger  · 技术社区  · 15 年前

    我有一段简单的代码

    public ActionResult ListToGrid(string field, string direction)
    {
        _model.MyList = _repo.List();
    }
    

    排序时,我可以这样做:

    _model.MyList = _employeeService.List().OrderBy(x => x.FirstName).ToList<Employee>();
    

    但我想在参数中使用“as-field”这个名称receive(field),也要使用接收方向。

    谢谢,

    2 回复  |  直到 15 年前
        1
  •  2
  •   Guffa    15 年前

    你可以使用反射,但那会很慢。最有效的方法是声明要在排序中使用的委托,并根据字符串分配函数:

    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>();
    
        2
  •  1
  •   Eilon    15 年前

    搜索讨论动态LINQ表达式的站点。例如,本例演示了如何进行动态排序:

    http://blogs.sftsrc.com/stuart/archive/2009/02/19/130.aspx

    然后您还可以选择是否呼叫 OrderBy OrderByDescending 取决于方向参数。