将linq方法语法转换为查询语法

时间:2010-01-22 08:35:26

标签: c# .net linq

并不是说它会更好,但是我试图让我的头脑转向以下方法语法来查询语法以查看差异。

long diskSpace = Directory.EnumerateDirectories(@"c:\")
                    .SelectMany(Directory.EnumerateFiles)
                    .Sum(fileSize => new FileInfo(fileSize).Length);

2 个答案:

答案 0 :(得分:6)

该查询大致相当于:

long diskSpace = (from directory in Directory.EnumerateDirectories(@"c:\")
                  from file in Directory.EnumerateFiles(directory)
                  select file)
                 .Sum(file => new FileInfo(file).Length);

(我已将fileSize重命名为file以更准确地表示其含义,顺便说一句。)

在这种情况下有一个实际的区别 - 我们正在创建一个新的委托,它调用Directory.EnumerateFiles而不是直接从{{1>创建一个委托方法组。换句话说,它是一个额外的重定向级别 - 但这不会对结果产生任何影响,如果它有任何显着的性能影响,我会感到惊讶。

答案 1 :(得分:0)

没有区别。

编译器将查询语法aka LINQ转换为这些方法调用。查询语法只是语法上的含义。这不是魔术。