1

我想先根据 prop1 对以下列表进行排序,然后再根据我选择的 prop2 值对以下列表进行排序。例如,我想使用 prop1 按升序对列表进行排序,然后使用包含值“project”的 prop2,然后是包含值“application”的 prop2,然后是包含值“core”的 prop2

IList<Test> tests = new List<Test>
        {
            new Test{prop1 = "Name1", prop2="project235"},
            new Test{prop1 = "Name1", prop2="core222"},
            new Test{prop1 = "Name1", prop2="application33331"},
            new Test{prop1 = "Name1", prop2="project"},
            new Test{prop1 = "Name1", prop2="application21"},
            new Test{prop1 = "Name1", prop2="core1"},
            new Test{prop1 = "Name1", prop2="application"},

            new Test{prop1 = "Name2", prop2="application"},
            new Test{prop1 = "Name2", prop2="core"},
            new Test{prop1 = "Name2", prop2="project"}
        };

预期的输出是这样的

Name1项目

名称1项目235

Name1 应用程序

名称 1 应用程序21

Name1 应用程序33331

名称1 core1

名称1 core222

Name2 项目

Name2 应用程序

Name2核心

先感谢您!!!!

4

2 回答 2

2
tests = tests.OrderBy(x=>x.prop1)
.ThenBy(x => x.prop2 == null)
.ThenBy(x=>!x.prop2.Contains("project"))
.ThenBy(x=>!x.prop2.Contains("core"))
.ThenBy(x=>!x.prop2.Contains("application"))
.ThenBy(x=>x.prop2).ToList();
于 2013-08-21T03:27:14.117 回答
0
 var result = tests.GroupBy(x=>x.prop1)
                   .SelectMany(g=>g.GroupBy(x=>string.IsNullOrEmpty(x.prop2) ? 1
                                               x.prop2.StartsWith("project") ? 2 :
                                               x.prop2.StartsWith("application") ? 3 : 4)
                                   .OrderBy(x=>x.Key)
                                   .Select(a=>a.OrderBy(x=>x.prop2)));
于 2013-08-21T03:18:31.530 回答