我不知道你提出的查詢是你真正想要還是需要的查詢,但假設它是這樣的,我們來考慮是否重新編寫它是一種更好的方式。
你想要看的地方是C#4規範的第7.16.2.1,其中一部分我在這裏引用爲了您的方便:
與延續查詢表達式
from ... into x ...
被翻譯成
from x in (from ...) ...
清楚了嗎?讓我們來看看您的查詢的片段,我已經標有星:
var groups = from instance in instances
group instance by instance.PatientID into patientGroups
from studyGroups in
**** (from instance in patientGroups
group instance by instance.StudyID) ****
from seriesGroup in
(from instance in studyGroups
group instance by instance.SeriesID)
from instanceGroup in
(from instance in seriesGroup
group instance by instance.InstanceID)
group instanceGroup by patientGroups.Key;
在這裏,我們有
from studyGroups in (from ...) ...
規範說,這相當於
from ... into studyGroups ...
所以我們可以重寫您的查詢爲
var groups = from instance in instances
group instance by instance.PatientID into patientGroups
from instance in patientGroups
group instance by instance.StudyID into studyGroups
from seriesGroup in
**** (from instance in studyGroups
group instance by instance.SeriesID) ****
from instanceGroup in
(from instance in seriesGroup
group instance by instance.InstanceID)
group instanceGroup by patientGroups.Key;
再來一次。現在我們有
from seriesGroup in (from ...) ...
和規範說,這是一樣的
from ... into seriesGroup ...
因此改寫這樣的:
var groups = from instance in instances
group instance by instance.PatientID into patientGroups
from instance in patientGroups
group instance by instance.StudyID into studyGroups
from instance in studyGroups
group instance by instance.SeriesID into seriesGroup
from instanceGroup in
**** (from instance in seriesGroup
group instance by instance.InstanceID) ****
group instanceGroup by patientGroups.Key;
又一次!
var groups = from instance in instances
group instance by instance.PatientID into patientGroups
from instance in patientGroups
group instance by instance.StudyID into studyGroups
from instance in studyGroups
group instance by instance.SeriesID into seriesGroup
from instance in seriesGroup
group instance by instance.InstanceID into instanceGroup
group instanceGroup by patientGroups.Key;
我希望你的同意是一個更容易閱讀。我會通過更改「實例」用於半打次,意味着不同的事情的事實提高其可讀性更多:
var groups = from instance in instances
group instance by instance.PatientID into patientGroups
from patientGroup in patientGroups
group patientGroup by instance.StudyID into studyGroups
from studyGroup in studyGroups
group studyGroup by studyGroup.SeriesID into seriesGroups
from seriesGroup in seriesGroups
group seriesGroup by seriesGroup.InstanceID into instanceGroup
group instanceGroup by patientGroups.Key;
無論這其實是你需要解決你的問題查詢,我不知道,但至少這一個你可以推理,而不是試圖關注所有的嵌套。
這種技術被稱爲「查詢延續」。基本上這個想法是延續到目前爲止在查詢中引入了一個新的範圍變量。
這會有幫助嗎? var result = instances.GroupBy(i => new {i.InstanceID,i.SeriesID,i.StudyID,i.PatientID}) – WorldIsRound 2011-03-04 21:48:16
Nope - 感謝HelloWorld,這只是列表中的所有項目列表。我認爲我遇到的問題是嘗試使用LINQ來建立關係。 – 2011-03-04 22:01:20