使用Linq按许多条件排序列表

时间:2013-07-26 16:09:10

标签: c# linq sorting

我有下面的代码填充列表。

List<Person> people = new List<Person>();
for (int i = 1; i <= 30; i++)
{
    var p = new Person();
    if (i <= 10) p.Group = "A";
    else if (i <= 20) p.Group = "B";
    else p.Group = "C";
    p.Name = "Person " + i;
    if (i % 3 == 0)
        p.Age = 10;
    else
        p.Age = 20;
    people.Add(p);
}

现在我想按照以下顺序进行排序:所有人必须是第一个拥有“B”组并且必须按年龄排序的人。然后其余的人必须按年龄排序,集团不必有序。这是一个例子:

Name   Group   Age
Person   B     10
Person   B     10
.....
Person   B     20
Person   B     20
Person   B     20
.....
//From here Group doesn't have to be in order.
Person   A     10
Person   A     10
.....
Person   C     10
Person   C     10
.....
Person   A     20
Person   A     20
Person   A     20
.....
Person   C     20
Person   C     20
Person   C     20
....

我可以使用一个linq查询执行此操作吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:12)

您可以先使用OrderBy订购B,此处的技巧<{em> false始终位于true之前。然后按Age订购:

 var result = list.OrderBy(p => p.Group != "B")
                  .ThenBy(p => p.Age);