0

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

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

4

1 回答 1

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。

于 2012-07-03T19:29:04.267 回答