我知道以下查询是如何工作的,我只是对术语感到困惑。
每个查询都以强制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 };
谢谢
答案 0 :(得分:2)
不,在底部你正在进行隐式连接,而不是子查询。您可以在连接中同时查询两个表(在同一查询中)。
答案 1 :(得分:1)
在第二个查询result1
中,没有子查询,只有一个包含两个from
子句的查询。
在幕后,以这种方式使用两个from
子句将被转换为SelectMany
操作:
artists.SelectMany( p1 => p1.albums
,(p1,p2) => new { Artist_id = p1.id, Album_id = p2.id })