我有一个清单。
Foo 有两个属性,CaseId 和 PersonId。
我需要对列表进行排序,以便它们按 PersonId 分组,但首先是具有最低 CaseId 的人。
所以,鉴于这些数据
P1 C19
P2 C23
P2 C24
P1 C28
P3 C07
P2 C32
P3 C60
P1 C20
它被排序为
P3 C07
P3 C60
P1 C19
P1 C20
P1 C28
P2 C23
P2 C24
P2 C32
我不知道如何将其编写为 LINQ 查询。
我有一个清单。
Foo 有两个属性,CaseId 和 PersonId。
我需要对列表进行排序,以便它们按 PersonId 分组,但首先是具有最低 CaseId 的人。
所以,鉴于这些数据
P1 C19
P2 C23
P2 C24
P1 C28
P3 C07
P2 C32
P3 C60
P1 C20
它被排序为
P3 C07
P3 C60
P1 C19
P1 C20
P1 C28
P2 C23
P2 C24
P2 C32
我不知道如何将其编写为 LINQ 查询。
这个:
var persons = new[] {
new Foo { PersonId = "P1", CaseId = "C19" },
new Foo { PersonId = "P2", CaseId = "C23" },
new Foo { PersonId = "P2", CaseId = "C24" },
new Foo { PersonId = "P1", CaseId = "C28" },
new Foo { PersonId = "P3", CaseId = "C07" },
new Foo { PersonId = "P2", CaseId = "C32" },
new Foo { PersonId = "P3", CaseId = "C60" },
new Foo { PersonId = "P1", CaseId = "C20" },
};
var res = (from p in persons
group p by p.PersonId into q
orderby q.Min(r => r.CaseId)
select q).ToArray();
会按要求做。
你group by
PersonId
,然后orderby
是Min(r => r.CaseId)
每个组的。
但也许在功能符号中它更清楚。
var res2 = persons.GroupBy(p => p.PersonId)
.OrderBy(p => p.Min(q => q.CaseId))
.ToArray();
正如它所写的那样,组是有序的,而不是组“内部”的元素。
如果您甚至希望对组内的元素进行排序:
var res3 = (from p in persons
orderby p.CaseId
group p by p.PersonId into q
orderby q.Min(r => r.CaseId)
select q).ToArray();
因为分组保持元素的顺序(至少在 LINQ to Objects 中。我不能保证它在 EF 或 LINQ-to-SQL 中是相同的)。