我有下面的代码填充列表。
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查询执行此操作吗?
感谢您的帮助!
答案 0 :(得分:12)
您可以先使用OrderBy
订购B
,此处的技巧<{em> false
始终位于true
之前。然后按Age
订购:
var result = list.OrderBy(p => p.Group != "B")
.ThenBy(p => p.Age);