考虑此查询,按照姓氏的第一个字母对学生列表进行分组:
var query = from s in students
group s by s.Last[0] into group1
orderby group1.Key
from g in group1
select new { g.First, g.Last }
现在,说from g in group1
的部分没有迭代group1
的键,它正在迭代group1
中每个键的值。
这就是我希望它被处理的方式(制作一个平面列表),但这对我来说似乎很直观。
要回答我的问题,我只需要有人指出MSDN的部分解释这个或解释为什么我是反直觉的那个; - )
答案 0 :(得分:1)
在查询表达式中引入辅助from
子句时,会转换为对SelectMany
的调用。正如你所说,这基本上是一种扁平化操作。
可以更容易地将其转换为两个查询:
var groups = from s in students
group s by s.Last[0];
var query = from grp in groups
orderby grp.Key
from item in grp
select new { item.First, item.Last };
这与您所拥有的原始查询完全相同,但可能会更容易理解。
其他可能有帮助的资源...... Edulinq是我撰写的一系列博文,为了教育目的从头开始重新实现LINQ to Objects。