如何使用Linq对列表顺序进行排序?

时间:2015-06-24 12:31:34

标签: c# .net linq sorting

以下是我从其他服务获取列表对象的数据的顺序。

Data in List

  

如何按以下顺序对上面的列表顺序进行排序?

0级班 0级S级轿车
1级班 1级S级轿车
2级班 2级S级轿车
0级课程 0级S-课程
1级课程 1级S-Lesson
2级课程 2级S-Lesson

到目前为止,我已尝试过如下操作,但只获得了ProgramId“E”的正确订单。

    myList.OrderByDescending(x => x.ProgramId== "E")
          .ThenBy(x => x.Level)
          .ThenBy(x => x.Special = True)
          .ThenBy(x => x.Special = False)
          .ThenByDescending(x => x.ProgramId== "B")
          .ThenBy(x => x.Level)
          .ThenBy(x => x.Special = True)
          .ThenBy(x => x.Special = False);

以下是我尝试应用的排序逻辑:

  • 应该首先根据ProgramId进行排序,然后是Level,然后是Special = false,然后是Special = true。
  • 在ProgramId中,排序顺序应为“E”,后跟“B”。
  • 在Level内,排序顺序应为Level 0,然后是Level 1,然后是Level 2

对此有任何帮助建议将不胜感激!

3 个答案:

答案 0 :(得分:3)

试试这个?

 myList.OrderByDescending(x => x.ProgramId)
              .ThenBy(x => x.Level)
              .ThenByDescending(x => x.Special)

答案 1 :(得分:1)

这将产生您所要求的订单:

myList = myList.OrderByDescending(x => x.ProgramId)
    .ThenBy(x => x.Level)
    .ThenBy(x => x.Special);

我不知道为什么你认为这不起作用,但我现在已经测试了它,它完全符合你的规范。

Here is a working example

答案 2 :(得分:-1)

.OrderBy(x => x.Level).ThenBy(x => x.ProgramDescription)