C# 什么';使用扩展方法重写以下LINQ语句的优雅方式是什么?

C# 什么';使用扩展方法重写以下LINQ语句的优雅方式是什么?,c#,.net,linq,C#,.net,Linq,我有下面的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 }); 然而,这是一切,但优雅 你知道如何提高第二个表达式的美观吗?使

我有下面的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 }); 
然而,这是一切,但优雅


你知道如何提高第二个表达式的美观吗?

使用
Join
是错误的方法

与此直接对应的是(我认为!):

虽然我认为这相当于:

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

你真的在所有三个
from
子句中使用相同的顺序吗?@Jon Skeet:是的,这就是目的。这个特别的例子来自Eric Mayer第9频道关于函数式编程的视频讲座。从美的角度来看,加入显然是错误的做法。在正确性的意义上,关系代数(SQL)直觉告诉我这应该是好的。@Jakub:它可能会工作,但这并不意味着它是正确的方法。LINQ相当于交叉连接(即,在没有“键”的情况下)不是
join
,而是
SelectMany
)-即使
SelectMany
本身提供了比这更多的功能。它们是否都缺少一个parethesis?很抱歉,这是一个吹毛求疵的问题;我的大脑很难解析第一个表达式,而不知道最后一个参数是哪个SelectMany。但是它里面有一个
x
,所以它应该是显而易见的。
e.SelectMany(x => e.SelectMany(y => e.Select(new { x, z })))
e.SelectMany(x => e.SelectMany(y => e.Select(z => new { x, z })))