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