这也被视为子查询吗?

时间:2011-09-22 17:53:26

标签: linq linq-to-objects

我知道以下查询是如何工作的,我只是对术语感到困惑。

每个查询都以强制FROM子句开头,并且必须以SELECT或GROUP子句结束。在这两个子句之间,我们可以放置任意数量的可选FROM ... LET ... WHERE子句。子查询只是查询中的查询,这意味着它也具有相同的结构:

var result = from p1 in artists
             from p3 in (from p2 in p1.albums
                         select new { ID = p2.id, Title = p2.title }) 
             select p3;

但与上例中的子查询不同,以下子查询(from p2 in artist.Albums)并不以其自己的SELECT / GROUP子句结束,因此它的结构在某种意义上是不同的,它以FROM子句开头,但不以SELECT / GROUP子句结束。所以我的问题是术语子查询是否也适用于from p2 in artist.Albums,即使它的结构有点不同?

 var result1 = from p1 in artists
               from p2 in p1.Albums
               select new { Artist_id = p1.id, Album_id = p2.id };

谢谢

2 个答案:

答案 0 :(得分:2)

不,在底部你正在进行隐式连接,而不是子查询。您可以在连接中同时查询两个表(在同一查询中)。

答案 1 :(得分:1)

在第二个查询result1中,没有子查询,只有一个包含两个from子句的查询。

在幕后,以这种方式使用两个from子句将被转换为SelectMany操作:

artists.SelectMany( p1      => p1.albums
                   ,(p1,p2) => new { Artist_id = p1.id, Album_id = p2.id })