关于C#:按属性名称排序的订单列表list

Order List<Object> by property name

本问题已经有最佳答案,请猛点这里访问。

我有一节课

1
2
3
4
public class Test
{
    public string Value { get; set; }
}

然后

1
List<Test> values = new List<Test>()  //contains 10 items

列表中的某些项的value属性可以以字符>开头。

例子:

1
2
3
4
5
6
7
 Name
 Something
 Example
 > Another one
 Demo
 Student
 > Home

如何对对象列表进行排序,以便列表中的第一个项目按字母顺序排序,以>开头的项目也按字母顺序排序,但位于列表末尾?

这就是我迄今为止所做的:

1
values.Where(x => !x.Value.StartsWith(">")).OrderBy(x => x.Value);


您需要计算一个键来排序

1
2
3
List<Test> ordered = values.OrderBy(v =>
         v.Value.StartsWith(">") ?"ZZ" + v.Value : v.Value
).ToList();

"zz"是一个任意键,将以">"开头的值排序到所有英文术语之后。(字母表中的最后一个字母,没有以两个zs开头的英文单词)。因为">"的字节值比任何字母都要低,所以Z是不够的,因为任何有效的英文术语都会在Z>开头的任何字符之后排序。