Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将简单SelectMany转换为查询语法_C#_Linq - Fatal编程技术网

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