将简单的SelectMany转换为查询语法

时间:2015-04-14 23:22:25

标签: 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;

...并产生以下流利语法。

array
   .SelectMany (
      s => s, 
      (s, c) => c
   );

重新:可能重复

我已经阅读了Is there a C# LINQ syntax for the Queryable.SelectMany() method?的答案我害怕答案'翻译不会编译回原始的流利语法

1 个答案:

答案 0 :(得分:3)

编译器执行转换以将查询语法转换为方法语法。详细信息在C#5规范的第7.6.12节中规定。快速搜索只会出现几个可以调用SelectMany的翻译,所有内容都在7.6.12.4节中:

  

带有第二个from子句后跟select子句的查询表达式:
      来自e1的x1       来自e2的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的其他重载。