如何按降序列出对象列表?

时间:2015-08-21 07:10:19

标签: c# .net linq list c#-4.0

代码:

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public List<object> GetDetails()
    {
    ........
    ........
    var employeeList = ....;

    var employees = new List<Object>();

    foreach (var employee in employeeList)
    {
      var record = .....;

        var number = record.Select(x => x.number).FirstOrDefault();
        var name = record.Select(x => x.name).FirstOrDefault();

        projects.Add(
                      new
                      {
                          EmployeeNumber = number,
                          EmployeeName = name
                      });
    }
    return employees;
}

我尝试了以下代码,但它会抛出一条错误消息,说明需要实现IComparable

employees.OrderByDescending(x => x);

我希望以EmployeeNumber为基础退还员工。

1 个答案:

答案 0 :(得分:3)

由于employees是填充了匿名类型的List<object>,因此您无法在填充后轻松对其进行排序(至少不是强类型),但如果使用Select而不是for each,你可以在任何后续的linq扩展中使用匿名类型。

因此,不要使用foreach填充列表,而是先使用以下内容对源进行排序:

employees = employeeList.Select(employee =>
            {
                var record = .....;

                var number = record.Select(x => x.number).FirstOrDefault();
                var name = record.Select(x => x.name).FirstOrDefault();

                return
                              new
                              {
                                  EmployeeNumber = number,
                                  EmployeeName = name
                              };
             }).OrderByDescending(e => e.EmployeeNumber).Cast<object>().ToList();

注意,在这里使用ToList创建列表,但您也可以枚举(foreach)OrderByDescending的结果