LINQ子查询和嵌套的FROM语句之间有什么区别

时间:2012-10-23 17:59:51

标签: c# linq linq-to-objects

1)子查询是查询中的查询,因此必须以FROM子句开头,以SELECT或GROUP BY子句结束。但是我很困惑为什么我们不将那些只有FROM子句的嵌套语句视为子查询(因此它们不以SELECT或GROUP BY结尾)。

from c_2 in collection_2的行为与子查询的行为非常相似,因为它枚举了每个collection_2元素的整个c_1。由于它们的行为非常相似,为什么from c_2 in collection_2之类的语句也不被视为子查询(你可以认为子查询返回结果,但同样的参数也可以说是from c_2 in collection_2,因为它会转换成对SelectMany的调用吗?

    var query = from c_1  in collection_1
                from c_2  in collection_2 
                select ...

谢谢

1 个答案:

答案 0 :(得分:1)

  

但也可以从collection_2中的c_2说出相同的参数,因为它确实被转换为对SelectMany的调用

不是真的。那一个电话不会转换为SelectMany。事实上,有两个from子句组合在一起(只有一个select)导致它被转换为SelectMany调用,所以整个事情是一个查询在这种情况下。如果每个from与单个select匹配,则它将是子查询。