Linq表达式是否在使用'from'子句迭代时特别对待组?

时间:2012-07-03 19:23:45

标签: .net linq linq-group

考虑此查询,按照姓氏的第一个字母对学生列表进行分组:

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的部分解释这个或解释为什么我是反直觉的那个; - )

1 个答案:

答案 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。