2015-06-24 109 views
2

以下是我从其他服务获取到列表对象中的数据的顺序。如何使用Linq对列表顺序进行排序?

Data in List

我怎样才能在下面进行排序上面列表的顺序?

级别0类
级别0 S级
等级1级
第1级S级
级别2类
第2级的S级
级别0课
等级0 S -Lesson
Level 1课
Level 1 S-Lesson
Level 2课
2级S课

到目前为止,我已经尝试如下,但只得到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进行排序在前,后跟级别和特殊=假紧随其后,其次是特殊= TRUE。
  • 在ProgramId中,排序顺序应该是“E”,然后是“B”。
  • 在级别,应当级别0之后1级排序顺序,接着第2级

任何帮助的建议,将不胜感激!

+0

你根本不知道它是如何排序?它看起来不像你指定的东西。它看起来像'ProgramDescription'然后'Level'。 –

+0

感谢您提供更多详细信息@CharlesMager,我在我的问题中描述了排序逻辑。 – seUser

回答

1

这将产生您所要求的顺序:我不知道

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

为什么你认为这是不行的,但是现在我已经测试它和它的工作原理完全按照您的规格。

Here is a working example

+0

是@musefan,不能按说明去! – seUser

+0

@seUser:所以使用我的第一个,它会正确地对布尔值进行排序。 'ThenBy'会首先排序错误,这是你想要的,不要使用降序 – musefan

+0

是的,但它只适用于programid'E'而不适用于'B' – seUser

3

试试这个?

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

很确定布尔人命令'false,true',而不是相反。我想知道谁高举这个... – musefan

+0

感谢大卫&musefan,实际上我想先显示不特殊,所以大卫的建议应该工作,但是我有超过两个ProgramId比我在示例数据中显示。所以通过上面的排序逻辑,我只能得到ProgramId“E”的正确顺序,然后我只按顺序获得顺序,不知道为什么,如下所示: 0级, 0级S级, Level 1 Class , 1级S级, 级别2级, 第2级的S级, 级别0课, 第1级课程, 2级课程, 1级S-课, 级别0 S-课, Level 2 S-Lesson – seUser

+0

@seUser:如果您有更多的程序ID,然后编辑您的问题并将其全部包含在内,这对解决方案非常重要 – musefan

-1
.OrderBy(x => x.Level).ThenBy(x => x.ProgramDescription) 
+0

你会得到:'0班,0课,0课,0课,...' – musefan