代码之家  ›  专栏  ›  技术社区  ›  Jakub Å turc

使用扩展方法重写以下linq语句的优雅方法是什么?

  •  7
  • Jakub Å turc  · 技术社区  · 16 年前

    我有以下linq语句,我想用扩展方法重写它。

    from x in e
    from y in e
    from z in e
    select new { x, z }
    

    一种可能的解决方案是:

    e.Join(e, x => 42, y => 42, (x, y) => new { x, y })
      Join(e, _ => 42, z => 42, (_, z) => new { _.x, z }); 
    

    然而,这一切都不优雅。

    你知道如何提高第二表情的美感吗?

    2 回复  |  直到 16 年前
        1
  •  6
  •   Darin Dimitrov    16 年前
    e.SelectMany(x => e.SelectMany(y => e.Select(z => new { x, z })))
    
        2
  •  6
  •   Jon Skeet    14 年前

    使用 Join 在我看来是错误的做法。

    它的直接等价物是(我想!):

    e.SelectMany(x => e.SelectMany(y => e.Select(new { y, z }),
                 (x, yz) => new { x, yz.z }))
    

    虽然我 认为 相当于:

    e.SelectMany(x => e.SelectMany(y => e.Select(new { x, z })))