C#Custom按枚举或列表排序

时间:2011-11-07 21:29:14

标签: c# asp.net sorting

我需要为List构建一个分类器类。

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

  

SFC = 1 SSG = 2 SGT = 3 CPL = 4 SPC = 5 ETC ...

因此,当我排序时,我会按照排名先排序,然后按姓氏来获得正确的顺序。

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

... ETC

请引导我阅读文章或说明。感谢

6 个答案:

答案 0 :(得分:3)

你能使用LINQ吗?

person.OrderBy(p => p.Rank).ThenBy(p => p.LastName)

或使用orderby子句的查询语法:

from p in person
orderby p.Rank, p.LastName
select p

答案 1 :(得分:1)

public enum Rank
{
    SFC = 1, SSG, SGT
}

public class Person
{
    public Rank Rank { get; set; }
    public string Name { get; set; }
}

static void Main(string[] args)
{
    var persons = new List<Person>
    {
        new Person{ Name = "Aaaa", Rank = Rank.SFC },
        new Person{ Name = "Bbbb", Rank = Rank.SFC },
        new Person{ Name = "Aaaa", Rank = Rank.SSG }
    };

    foreach (var person in persons.OrderBy(p => p.Rank).ThenBy(p => p.Name))
    {
        Console.WriteLine("{0} {1}", person.Rank, person.Name);
    }
}

输出:

SFC Aaaa
SFC Bbbb
SSG Aaaa

答案 2 :(得分:1)

var ordered = person.OrderBy(p => p.Rank)
                    .ThenBy(p => p.LastName)
                    .ThenBy(p => p.FirstName);

请注意,这不会修改person。它只生成一个迭代器,迭代时产生以指定顺序返回的person结果。如果您想要修改列表,则必须采用稍微不同的方法(请注意,仅仅person = ordered.ToList();并不足以说明实际创建List<Person>的新实例。

答案 3 :(得分:0)

使用linq

var list = from xx in person
order by xx.Rank, xx.LastName
select xx

它将按等级和姓氏排序

答案 4 :(得分:0)

试试这个......

 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); 

答案 5 :(得分:0)

您的类Person应该从Icomparable接口继承。这样做你必须实现compareto()方法。然后你可以使用List的排序方法。