2014-12-23 52 views

回答

2

當您第一次執行查詢即

from student in students 
group student by student.Year 

這將返回IEnumerable<IGrouping<string,Student>>對象,這意味着,你將有一組多個項目(IEnumerable的),並且組包括密鑰(student.Year這類型的string)和屬於該組的對象(在這種情況下爲Student)。

現在,因爲這個Student對象本身將是一個IEnumerable(每個鍵(年)下的對象),我們再次quering它&,因爲你需要重新組LastName這IEnumerable的對象,所以再次步驟1將重複即它將再次返回IEnumerable<IGrouping<string,Student>>對象,其中重點將是「student.LastName」 & Student將具有姓爲重點所有學生對象: - 現在

from student in newGroup1 
group student by student.LastName 

,因爲我們原來的目標是通過Year應該組,我們再次按分組3210這只不過是student.Year

另外,當查詢以group by子句結束時,不需要選擇。您的LINQ查詢可以以選擇或組運算符結束。

編輯: - 按照本例中,新年是一個枚舉,所以返回的類型將是我剛纔提到的略有不同,只需要運行下面的查詢,看看輸出: -

IEnumerable<IGrouping<StudentClass.GradeLevel, StudentClass.Student>> group1 = 
                from student in students 
                group student by student.Year; 

查看這個Fiddle,你會注意到,根據Year對學生進行分組,但我們希望這些學生按LastName進一步分組,所以我們使用了into關鍵字,它將輸出存儲到一個可以查詢的新標識符中進一步。所以忘了最初的結果,現在關注我們從上面收到的group1的輸出,我們需要按姓氏對學生進行分組,因此內部查詢(from student in newGroup1 group student by student.LastName),但請記住我們必須保留我們在第1步中完成的分組,即,我們有按姓氏對學生進行分組,但僅在每年內進行分組,因此我們將這個第二查詢結果按原始密鑰即「年」分組。

+0

cna您詳細介紹了一個工作示例,我很感興趣\ –

+0

那麼......第一部分會導致一些{{Year1 {s1A,s1B,...}},{Year2 {s2A,s2B,...} },...}集合,以及第{{LastNameA {sA1,sA2,...}},{LastNameB {sB1,sB2,...}},...}集合中的第二部分。然後..這兩個集合加入?或什麼去那裏?其中一個棘手的問題就是如何從第二部分查詢第一部分,我可以想象第一部分是T-SQL中的公用表表達式? – Tsayper

+0

@ EhsanSajjad,@ tsayper - 請檢查我的更新。 –