如何对列表进行一般排序

时间:2010-12-01 21:54:40

标签: c# .net asp.net-mvc-2 sorting

我正在使用从数据库中提取的一组对象的Html.Grid(通过LINQ to SQL)。这是网格代码(我已将数据更改为人为的设计)。该页面强烈类型为People。

<%=Html.Grid<People>(Model)    
// Display chose solution information.
    .Columns(column =>
        {
            column.For(person => person.Name);
            column.For(person => person.Address.City);
        }
    )
%>

在数据库中,我会有一个People表和一个由外键链接的Address表。 (再次,这是设计 - 只是试图描述问题。)

我想允许用户对列进行一般排序。以前的开发人员在控制器中的排序中进行了硬编码,就像这样......

//
// GET: Results/Grid
public ActionResult Grid(int id, GridSortOptions sort)
{
    if (sort == null)
    {
        sort = new GridSortOptions();
    }

    Solution solution = repository.GetSolution(id);
    List<People> people = solution.People.ToList();
    if (!string.IsNullOrEmpty(sort.Column))
    {
        people = solution.People.ToList().OrderBy(sort.Column, sort.Direction).ToList();
    }

    return PartialView("Grid", people);
}

当我排序的对象是人时(如果我点击person.Name列对其进行升序或降序排序),这非常有用。但是,当我想对地址列进行排序时,我得到一个例外,因为人们不包含城市......地址确实如此。

我的问题是......有没有办法在不知道类型是什么的情况下通常做这种排序?感谢。

2 个答案:

答案 0 :(得分:0)

javascript表格分拣机怎么样?当然,如果您的列表足够大以至于需要分页,那么这将无效。

答案 1 :(得分:0)

我回来后发布了一个类似的问题。我在那篇文章上得到的答案可能会帮助你顺利开始:

Looking for a better way to sort my List<T>

基本上答案建议持有Func&lt;&gt;的地图。 (或类似的)并在代码块中调用适当的一个。