【问题标题】:How to list the List of Objects in descending order?如何按降序列出对象列表?
【发布时间】:2015-08-21 07:10:18
【问题描述】:

代码:

    [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 降序返回员工。

【问题讨论】:

  • 你试过employees.OrderByDescending(x =&gt; x.EmployeeNumber);吗?
  • EmployeeNumber 未在智能感知中列出...仅列出 equals, gethashcode, gettype, tostring
  • 根据姓名或号码降序排列?
  • 我已经尝试过employees.OrderByDescending(x =&gt; x.EmployeeNumber)EmployeeNumber 没有列出...我认为它是对象初始化器...
  • 投反对票的人,至少给出答案。

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


【解决方案1】:

由于employees是一个填充匿名类型的List&lt;object&gt;,所以填充后不能轻易排序(至少不是强类型),但是如果你使用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 的结果

【讨论】:

  • 匿名类型#1列表
  • 我猜Cast() 方法会把它变成List&lt;Object&gt; 所以它可以正常使用,因为匿名类型的列表在方法之外是非常不可用的(并且为了与雇员变量兼容,这是List 是什么时候创建的)?
  • @RoyalBg 没错,因为 OP 将结果返回为 JSON,我假设他不需要强类型,所以 cast 是创建 List 的最简单方法。另一种方法是枚举 orderbydescending 结果并将这些条目添加到对象列表中。
  • 您的解决方案非常好。正是我需要的。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 2015-10-19
  • 1970-01-01
  • 2015-08-18
  • 2018-05-03
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多