这一个:根据要求
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到对象的排序,我不能保证它在EF相同或LINQ到SQL)。
@FrankPl,没有什么可以编译的......我的大脑已经在周末开始了。很明显,OrderBy很简单的失败。将结果分组为不是'Foo'的对象,并且发布了十几个明显不符合要求的代码示例是我们所有时间的浪费。 – CaffGeek