這一個:根據要求
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