我正在學習LINQ並遇到了一件很奇怪的事情。 這裏的查詢:請解釋LINQ嵌套分組
(http://msdn.microsoft.com/en-us/library/bb545974.aspx)
世界上沒有SELECT子句,一組是由另一組進行分組,我只是不能換我的腦海裏解決這個問題。你能解釋這個查詢,或者可以在SQL中演示一個等效的查詢嗎? 謝謝!
我正在學習LINQ並遇到了一件很奇怪的事情。 這裏的查詢:請解釋LINQ嵌套分組
(http://msdn.microsoft.com/en-us/library/bb545974.aspx)
世界上沒有SELECT子句,一組是由另一組進行分組,我只是不能換我的腦海裏解決這個問題。你能解釋這個查詢,或者可以在SQL中演示一個等效的查詢嗎? 謝謝!
當您第一次執行查詢即
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步中完成的分組,即,我們有按姓氏對學生進行分組,但僅在每年內進行分組,因此我們將這個第二查詢結果按原始密鑰即「年」分組。
cna您詳細介紹了一個工作示例,我很感興趣\ –
那麼......第一部分會導致一些{{Year1 {s1A,s1B,...}},{Year2 {s2A,s2B,...} },...}集合,以及第{{LastNameA {sA1,sA2,...}},{LastNameB {sB1,sB2,...}},...}集合中的第二部分。然後..這兩個集合加入?或什麼去那裏?其中一個棘手的問題就是如何從第二部分查詢第一部分,我可以想象第一部分是T-SQL中的公用表表達式? – Tsayper
@ EhsanSajjad,@ tsayper - 請檢查我的更新。 –