C# LINQ中的多from子句
如何使用扩展方法调用重新表达此LINQ查询表达式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(
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();