Это также считается подзапросом? - PullRequest
2 голосов
/ 22 сентября 2011

Я знаю, как работают следующие запросы, я просто запутался в терминологии.

Каждый запрос начинается с обязательного предложения 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 ]

2 голосов
/ 22 сентября 2011

Нет, внизу вы делаете неявное соединение, а не подзапрос.Объединение - это когда вы запрашиваете обе таблицы одновременно (в одном запросе).

1 голос
/ 22 сентября 2011

Во втором запросе, result1, подзапроса нет, просто запрос с двумя предложениями from.

За кулисами использование двух предложений from таким образом будет преобразовано в операцию SelectMany:

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