C# C按枚举或列表进行自定义排序

C# C按枚举或列表进行自定义排序,c#,asp.net,sorting,C#,Asp.net,Sorting,我需要为列表构建一个分类器类 我希望排序规则或优先级为: SFC=1 SSG=2 SGT=3 CPL=4 SPC=5等 因此,当我排序时,我将按照正确的顺序首先按排名,然后按姓氏排序 List<Person> person = new List<Person>(); person.Rank person.LastName person.FirstName 等等 请带我去看一篇文章或说明书。谢谢你能用LINQ吗 person.OrderBy(p => p.Rank

我需要为列表构建一个分类器类

我希望排序规则或优先级为:

SFC=1 SSG=2 SGT=3 CPL=4 SPC=5等

因此,当我排序时,我将按照正确的顺序首先按排名,然后按姓氏排序

List<Person> person = new List<Person>(); 
person.Rank
person.LastName
person.FirstName
等等

请带我去看一篇文章或说明书。谢谢你能用LINQ吗

person.OrderBy(p => p.Rank).ThenBy(p => p.LastName)
或将查询语法与子句一起使用:

输出:

SFC Aaaa SFC Bbbb SSG Aaaa 请注意,这不会修改person。它只生成一个迭代器,当对该迭代器进行迭代时,该迭代器将生成按指定顺序返回的person结果。如果你想修改列表,你必须采取稍微不同的方法。注意,仅仅说person=ordered.ToList是不够的;因为这实际上创建了List的一个新实例。

使用linq

var list = from xx in person
order by xx.Rank, xx.LastName
select xx
它将按等级和姓氏排序

试试这个

 var result = from m in person
             orderby m.Rank, m.LastName
             select m;
 var result = person.OrderBy(m=> m.Rank) 
                .ThenBy(m => m.LastName) 
                .ThenBy(m => m.FirstName); 
或者你可以试试这个

 var result = from m in person
             orderby m.Rank, m.LastName
             select m;
 var result = person.OrderBy(m=> m.Rank) 
                .ThenBy(m => m.LastName) 
                .ThenBy(m => m.FirstName); 

您的类Person应该从接口Icomparable继承。为此,您必须实现compareto方法。然后您可以使用列表的排序方法。

这是enum SFC=1 SSG=2 SGT=3 CPL=4 SPC=5等。不确定这是否会产生影响,但我正在填充person。从数据源排序,因此它是字符串类型,应该提到这一点。对不起
 var result = person.OrderBy(m=> m.Rank) 
                .ThenBy(m => m.LastName) 
                .ThenBy(m => m.FirstName);