我不知道你提出的查询是你真正想要还是需要的查询,但假设它是这样的,我们来考虑是否重新编写它是一种更好的方式。
你想要看的地方是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