C# 将简单SelectMany转换为查询语法
以下是C# 将简单SelectMany转换为查询语法,c#,linq,C#,Linq,以下是SelectMany()的简单形式。我们如何将其转换为查询语法 var array = new string[] { "Shaun", "Luttin" }; array .SelectMany( s => s ); 我所能做的最好的就是产生相同的输出,但引入了一个新变量c var query = from s in array.AsQueryable() from c in s select c; …并产生以下流畅的语法
SelectMany()
的简单形式。我们如何将其转换为查询语法
var array = new string[] { "Shaun", "Luttin" };
array
.SelectMany(
s => s
);
我所能做的最好的就是产生相同的输出,但引入了一个新变量c
var query =
from s in array.AsQueryable()
from c in s
select c;
…并产生以下流畅的语法
array
.SelectMany (
s => s,
(s, c) => c
);
Re:可能的重复
我已经阅读了的答案,恐怕答案的翻译没有编译回原始的流畅语法编译器执行翻译,将查询语法转换为方法语法。C#5规范第7.6.12节规定了详细信息。快速搜索只会找到几个翻译,这些翻译可能导致调用
SelectMany
,所有这些都在第7.6.12.4节:
第二个from子句后跟select子句的查询表达式:从e1中的x1开始
从e2中的x2开始
选择v
翻译成
(e1)。选择many(x1=>e2,(x1,x2)=>v)
及
第二个from子句后跟select子句以外的内容的查询表达式:从e1中的x1开始
从e2中的x2开始
…
翻译成
from*in(e1)。SelectMany(x1=>e2,(x1,x2)=>new{x1,x2})
…
因此,似乎没有任何翻译会导致调用另一个重载的
SelectMany
。查询表达式具有流畅的等价物。但是并不是所有的fluent方法调用都具有往返的查询理解。显然,如果..
包含组
,但没有来自的后续,这将阻止调用SelectMany
。