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

Jak*_*urc 7 .net c# linq

我遵循LINQ语句,我想使用扩展方法重写它.

from x in e
from y in e
from z in e
select new { x, z }
Run Code Online (Sandbox Code Playgroud)

一种可能的解决方案是

e.Join(e, x => 42, y => 42, (x, y) => new { x, y })
  Join(e, _ => 42, z => 42, (_, z) => new { _.x, z }); 
Run Code Online (Sandbox Code Playgroud)

然而,这一切都很优雅.

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

Jon*_*eet 6

使用Join是IMO的错误方法.

直接相当于(我认为!):

e.SelectMany(x => e.SelectMany(y => e.Select(new { y, z }),
             (x, yz) => new { x, yz.z }))
Run Code Online (Sandbox Code Playgroud)

虽然我认为这相当于:

e.SelectMany(x => e.SelectMany(y => e.Select(new { x, z })))
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 6

e.SelectMany(x => e.SelectMany(y => e.Select(z => new { x, z })))
Run Code Online (Sandbox Code Playgroud)