以下是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?的答案,恐怕答案的翻译不会重新编译为原始的流利语法。

最佳答案

编译器执行转换,以将查询语法转换为方法语法。有关详细信息,请参见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的另一个重载。

关于c# - 将简单的SelectMany转换为查询语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29639029/

10-17 02:34