代码之家  ›  专栏  ›  技术社区  ›  Mikael Svenson

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

  •  2
  • Mikael Svenson  · 技术社区  · 15 年前

    并不是说这样会更好,但我正试着回头看看下面的方法语法和查询语法的区别。

    long diskSpace = Directory.EnumerateDirectories(@"c:\")
                        .SelectMany(Directory.EnumerateFiles)
                        .Sum(fileSize => new FileInfo(fileSize).Length);
    
    2 回复  |  直到 15 年前
        1
  •  6
  •   Jon Skeet    15 年前

    该查询主要相当于:

    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 而不是 直接地 从创建委托 目录.枚举文件 方法组。换言之,这是一个额外的重定向级别-但这不会对结果产生任何影响,如果它有任何 重要的 性能影响。

        2
  •  0
  •   John Leidegren    15 年前

    没有区别。

    编译器将查询语法aka linq转换为这些方法调用。查询语法只是语法提示。这不是魔法。