【问题标题】:How to OrderBy() 2 or more parameters? [duplicate]如何 OrderBy() 2 个或更多参数? [复制]
【发布时间】:2014-08-08 10:41:18
【问题描述】:

例如,我有一个具有 3 个属性的对象:名称、价格和描述。我需要对这些对象的集合进行排序。只需一个参数即可轻松排序:

var sortedList = ObjectCollection.OrderBy(x => x.Name).ToList();

但是如何通过 2 个参数(名称和价格)进行排序。例如,我需要得到一个这样的列表:

ItemName1 $100 SomeDescription
ItemName1 $200 AnotherDescription
ItemName1 $250 AnotherDescription
ItemName2 $20 AnotherDescription
ItemName2 $40 Description
ItemName3 $100 Description

等等。所以,主键是一个名称,但如果有多个同名的项目,那么第二个键是价格。如何做到这一点?

【问题讨论】:

    标签: c#


    【解决方案1】:

    使用ThenBy 扩展,因为它不会覆盖以前使用的OrderBy 调用。

    var sortedList = ObjectCollection.OrderBy(x => x.Name).ThenBy(x => x.Price).ToList();
    

    【讨论】:

      【解决方案2】:

      您需要使用 linq 使用 ThenBy()

      ObjectCollection.OrderBy(x => x.Name).ThenBy(x => x.Price).ToList();
      

      【讨论】:

        【解决方案3】:

        使用Enumerable.ThenBy:

        var sortedList = ObjectCollection.OrderBy(x => x.Name).ThenBy(x => x.Description).ToList();
        

        【讨论】:

          【解决方案4】:
          var sortedList = ObjectCollection.OrderBy(x => x.Name).ThenBy(x => x.SecondPropertyToOrderBy).ToList();
          

          您可以像这样链接 OrderBy 或 OrderByDescending。我希望这会有所帮助

          【讨论】:

            【解决方案5】:

            你可以使用 Linq:

            ObjectCollection.OrderBy(x => x.Name).
                             ThenBy(x => x.Price).ToList();
            

            如果你不会使用Linq,你可以写一个custom comparator

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-04-13
              • 1970-01-01
              • 2018-05-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多