C# LINQ中的多from子句

C# LINQ中的多from子句,c#,linq,extension-methods,C#,Linq,Extension Methods,如何使用扩展方法调用重新表达此LINQ查询表达式 public static List<Tuple<int, int>> Concat() { return (from x in Enumerable.Range(1, 3) from y in Enumerable.Range(4, 3) select new Tuple<int, int>(x, y)).ToList(); } 公共静态列表Concat(

如何使用扩展方法调用重新表达此LINQ查询表达式

public static List<Tuple<int, int>> Concat()
{
    return (from x in Enumerable.Range(1, 3)
           from y in Enumerable.Range(4, 3)
           select new Tuple<int, int>(x, y)).ToList();
}
公共静态列表Concat()
{
返回(从可枚举范围(1,3)中的x开始)
从可枚举范围(4,3)中的y开始
选择新元组(x,y)).ToList();
}
返回可枚举的.Range(1,3)。选择many(x=>Enumerable.Range(4,3)
.Select(y=>newtuple(x,y))).ToList();
您的版本看起来更具可读性:-)

返回可枚举的.Range(1,3)。选择many(x=>Enumerable.Range(4,3)
.Select(y=>newtuple(x,y))).ToList();
您的版本看起来更具可读性:-)

可枚举。范围(1,3)。选择many(
i=>可枚举范围(4,3),
(i,j)=>新元组(i,j)
).ToList();
可枚举。范围(1,3)。选择多个(
i=>可枚举范围(4,3),
(i,j)=>新元组(i,j)
).ToList();

任何LINQ查询都可以用扩展方法调用表示。这是按定义定义的-所有LINQ关键字都是在语言规范中通过提供对相应方法调用的扩展来定义的。可以使用Reflector签出。任何LINQ查询都可以使用扩展方法调用来表示。这是按定义定义的-所有LINQ关键字都是在语言规范中通过提供对相应方法调用的扩展来定义的。可能已通过Reflector签出。使用带有resultSelector函数的重载SelectMany可使我更易于阅读。鉴于这是我对Haskell列表理解的翻译[(x,y)| x此示例可以使用无点样式更简洁地编写。(请参见)Enumerable.Range(1,3)。SelectMany(i=>Enumerable.Range(4,3),Tuple.Create)。ToList();将重载的SelectMany与resultSelector函数一起使用会使我更易于阅读。鉴于这是我对Haskell列表理解的翻译[(x,y)| x,可以使用无点样式更简洁地编写此示例。(请参阅)Enumerable.Range(1,3)。SelectMany(i=>Enumerable.Range(4,3),Tuple.Create)。ToList();
return Enumerable.Range(1, 3).SelectMany(x => Enumerable.Range(4, 3)
           .Select(y => new Tuple<int, int>(x, y))).ToList();
Enumerable.Range(1, 3).SelectMany(
    i => Enumerable.Range(4, 3),
    (i, j) => new Tuple<int, int>(i, j)
).ToList();