将简单的SelectMany转换为查询语法
以下是SelectMany()
的简单forms。 如果我们可以将其转换为查询语法怎么样?
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 );
回复:可能重复
我已经阅读了Queryable.SelectMany()方法是否有C#LINQ语法的答案? 我担心答案’翻译’不能编译回原始的流利语法 。
编译器执行转换以将查询语法转换为方法语法。 详细信息在C#5规范的第7.6.12节中规定。 快速搜索只会出现几个可能导致调用SelectMany
,所有内容都在7.6.12.4节中:
带有第二个from子句后跟select子句的查询表达式:
来自e1中的x1
来自e2中的x2
选择v
被翻译成( e1 ) . SelectMany( x1 => e2 , ( x1 , x2 ) => v )
( e1 ) . SelectMany( x1 => e2 , ( x1 , x2 ) => v )
和
带有第二个from子句的查询表达式,后跟select子句以外的其他内容:
来自e1中的x1
来自e2中的x2
…
被翻译成
from * in ( e1 ) . SelectMany( x1 => e2 , ( x1 , x2 ) => new { x1 , x2 } ) …
因此似乎没有转换导致SelectMany
的其他重载被调用。