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

Mik*_*son 2 .net c# linq

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

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

Jon*_*eet 6

该查询大致相当于:

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

(我已经重命名fileSizefile更准确地表示意思,顺便说一下.)

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