Я запрашиваю свою таблицу Accounts
и включаю несколько навигационных свойств:
var account = DBContext.Set<Account>()
.Where(a => a.ID == accountID)
.Include(a => a.AccountMembers)
.Include(a => a.AccountMembers.Select(am => am.Person))
.Include(a => a.AccountMembers.Select(am => am.Person.PersonPhones))
.Include(a => a.AccountMembers.Select(am => am.Person.PersonEmailAddresses))
.FirstOrDefault()
Account
имеет 0 .. * AccountMembers
, AccountMember
имеет 1 Person
, Person
имеет 0 .. * PersonPhones
и 0 .. * PersonEmails
. Как видите, я пытаюсь включить все это для конкретного c Account
. Запрос генерирует SQL, который использует inner
и left joins
, как я и ожидал, при включении только PersonPhones
или PersonEmailAddresses
, но как только я включаю оба, он выбирает AccountMembers
, People
, PersonPhones
unioned
с AccountMembers
, People
, PersonEmailAddresses
и outer applys
, что до Account
.
SELECT
[Project4].[OnlineID] AS [OnlineID],
[Project4].[pk_AccountID] AS [pk_AccountID],
[Project4].[IsWaiverOnFile] AS [IsWaiverOnFile],
[Project4].[EmergencyDirectives] AS [EmergencyDirectives],
[Project4].[FirstMembershipDate] AS [FirstMembershipDate],
[Project4].[fk_FacilityID] AS [fk_FacilityID],
[Project4].[IsDeleted] AS [IsDeleted],
[Project4].[CreatedDate] AS [CreatedDate],
[Project4].[LastModifiedDate] AS [LastModifiedDate],
[Project4].[DoNotMail] AS [DoNotMail],
[Project4].[fk_ReferringAccountID] AS [fk_ReferringAccountID],
[Project4].[DoNotEmail] AS [DoNotEmail],
[Project4].[CreatedOnline] AS [CreatedOnline],
[Project4].[fk_OriginalInquiryID] AS [fk_OriginalInquiryID],
[Project4].[IsMediaReleaseOnFile] AS [IsMediaReleaseOnFile],
[Project4].[Comments] AS [Comments],
[Project4].[C38] AS [C1],
[Project4].[C2] AS [C2],
[Project4].[C3] AS [C3],
[Project4].[C4] AS [C4],
[Project4].[C5] AS [C5],
[Project4].[C6] AS [C6],
[Project4].[C7] AS [C7],
[Project4].[C8] AS [C8],
[Project4].[C9] AS [C9],
[Project4].[C10] AS [C10],
[Project4].[C11] AS [C11],
[Project4].[C12] AS [C12],
[Project4].[C13] AS [C13],
[Project4].[C14] AS [C14],
[Project4].[C15] AS [C15],
[Project4].[C16] AS [C16],
[Project4].[C17] AS [C17],
[Project4].[C18] AS [C18],
[Project4].[C19] AS [C19],
[Project4].[C20] AS [C20],
[Project4].[C1] AS [C21],
[Project4].[C21] AS [C22],
[Project4].[C22] AS [C23],
[Project4].[C23] AS [C24],
[Project4].[C24] AS [C25],
[Project4].[C25] AS [C26],
[Project4].[C26] AS [C27],
[Project4].[C27] AS [C28],
[Project4].[C28] AS [C29],
[Project4].[C29] AS [C30],
[Project4].[C30] AS [C31],
[Project4].[C31] AS [C32],
[Project4].[C32] AS [C33],
[Project4].[C33] AS [C34],
[Project4].[C34] AS [C35],
[Project4].[C35] AS [C36],
[Project4].[C36] AS [C37],
[Project4].[C37] AS [C38]
FROM ( SELECT
[Limit1].[pk_AccountID] AS [pk_AccountID],
[Limit1].[OnlineID] AS [OnlineID],
[Limit1].[fk_FacilityID] AS [fk_FacilityID],
[Limit1].[fk_OriginalInquiryID] AS [fk_OriginalInquiryID],
[Limit1].[fk_ReferringAccountID] AS [fk_ReferringAccountID],
[Limit1].[FirstMembershipDate] AS [FirstMembershipDate],
[Limit1].[EmergencyDirectives] AS [EmergencyDirectives],
[Limit1].[IsWaiverOnFile] AS [IsWaiverOnFile],
[Limit1].[IsMediaReleaseOnFile] AS [IsMediaReleaseOnFile],
[Limit1].[DoNotMail] AS [DoNotMail],
[Limit1].[DoNotEmail] AS [DoNotEmail],
[Limit1].[CreatedDate] AS [CreatedDate],
[Limit1].[LastModifiedDate] AS [LastModifiedDate],
[Limit1].[CreatedOnline] AS [CreatedOnline],
[Limit1].[IsDeleted] AS [IsDeleted],
[Limit1].[Comments] AS [Comments],
[UnionAll1].[C1] AS [C1],
[UnionAll1].[C2] AS [C2],
[UnionAll1].[pk_AccountMemberID] AS [C3],
[UnionAll1].[fk_PersonID] AS [C4],
[UnionAll1].[fk_AccountID] AS [C5],
[UnionAll1].[CreatedDate] AS [C6],
[UnionAll1].[LastModifiedDate] AS [C7],
[UnionAll1].[fk_FacilityID] AS [C8],
[UnionAll1].[Relationship] AS [C9],
[UnionAll1].[IsPrimary] AS [C10],
[UnionAll1].[C3] AS [C11],
[UnionAll1].[pk_PersonID] AS [C12],
[UnionAll1].[FirstName] AS [C13],
[UnionAll1].[LastName] AS [C14],
[UnionAll1].[fk_AddressID] AS [C15],
[UnionAll1].[fk_FacilityID1] AS [C16],
[UnionAll1].[CreatedDate1] AS [C17],
[UnionAll1].[LastModifiedDate1] AS [C18],
[UnionAll1].[CreatedOnline] AS [C19],
[UnionAll1].[IsDeleted] AS [C20],
[UnionAll1].[pk_PersonPhoneID] AS [C21],
[UnionAll1].[fk_PhoneNumberID] AS [C22],
[UnionAll1].[fk_PhoneTypeID] AS [C23],
[UnionAll1].[IsDeleted1] AS [C24],
[UnionAll1].[CreatedDate2] AS [C25],
[UnionAll1].[LastModifiedDate2] AS [C26],
[UnionAll1].[fk_FacilityID2] AS [C27],
[UnionAll1].[fk_PersonID1] AS [C28],
[UnionAll1].[IsPrimary1] AS [C29],
[UnionAll1].[C4] AS [C30],
[UnionAll1].[C5] AS [C31],
[UnionAll1].[C6] AS [C32],
[UnionAll1].[C7] AS [C33],
[UnionAll1].[C8] AS [C34],
[UnionAll1].[C9] AS [C35],
[UnionAll1].[C10] AS [C36],
[UnionAll1].[C11] AS [C37],
CASE WHEN ([UnionAll1].[C2] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C38]
FROM (SELECT TOP (1)
[Extent1].[pk_AccountID] AS [pk_AccountID],
[Extent1].[OnlineID] AS [OnlineID],
[Extent1].[fk_FacilityID] AS [fk_FacilityID],
[Extent1].[fk_OriginalInquiryID] AS [fk_OriginalInquiryID],
[Extent1].[fk_ReferringAccountID] AS [fk_ReferringAccountID],
[Extent1].[FirstMembershipDate] AS [FirstMembershipDate],
[Extent1].[EmergencyDirectives] AS [EmergencyDirectives],
[Extent1].[IsWaiverOnFile] AS [IsWaiverOnFile],
[Extent1].[IsMediaReleaseOnFile] AS [IsMediaReleaseOnFile],
[Extent1].[DoNotMail] AS [DoNotMail],
[Extent1].[DoNotEmail] AS [DoNotEmail],
[Extent1].[CreatedDate] AS [CreatedDate],
[Extent1].[LastModifiedDate] AS [LastModifiedDate],
[Extent1].[CreatedOnline] AS [CreatedOnline],
[Extent1].[IsDeleted] AS [IsDeleted],
[Extent1].[Comments] AS [Comments]
FROM [dbo].[Accounts] AS [Extent1]
WHERE [Extent1].[pk_AccountID] = @p__linq__0 ) AS [Limit1]
OUTER APPLY (SELECT
CASE WHEN ([Extent4].[pk_PersonPhoneID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1],
1 AS [C2],
[Extent2].[pk_AccountMemberID] AS [pk_AccountMemberID],
[Extent2].[fk_PersonID] AS [fk_PersonID],
[Extent2].[fk_AccountID] AS [fk_AccountID],
[Extent2].[CreatedDate] AS [CreatedDate],
[Extent2].[LastModifiedDate] AS [LastModifiedDate],
[Extent2].[fk_FacilityID] AS [fk_FacilityID],
[Extent2].[Relationship] AS [Relationship],
[Extent2].[IsPrimary] AS [IsPrimary],
1 AS [C3],
[Extent3].[pk_PersonID] AS [pk_PersonID],
[Extent3].[FirstName] AS [FirstName],
[Extent3].[LastName] AS [LastName],
[Extent3].[fk_AddressID] AS [fk_AddressID],
[Extent3].[fk_FacilityID] AS [fk_FacilityID1],
[Extent3].[CreatedDate] AS [CreatedDate1],
[Extent3].[LastModifiedDate] AS [LastModifiedDate1],
[Extent3].[CreatedOnline] AS [CreatedOnline],
[Extent3].[IsDeleted] AS [IsDeleted],
[Extent4].[pk_PersonPhoneID] AS [pk_PersonPhoneID],
[Extent4].[fk_PhoneNumberID] AS [fk_PhoneNumberID],
[Extent4].[fk_PhoneTypeID] AS [fk_PhoneTypeID],
[Extent4].[IsDeleted] AS [IsDeleted1],
[Extent4].[CreatedDate] AS [CreatedDate2],
[Extent4].[LastModifiedDate] AS [LastModifiedDate2],
[Extent4].[fk_FacilityID] AS [fk_FacilityID2],
[Extent4].[fk_PersonID] AS [fk_PersonID1],
[Extent4].[IsPrimary] AS [IsPrimary1],
CAST(NULL AS uniqueidentifier) AS [C4],
CAST(NULL AS uniqueidentifier) AS [C5],
CAST(NULL AS uniqueidentifier) AS [C6],
CAST(NULL AS bit) AS [C7],
CAST(NULL AS datetime2) AS [C8],
CAST(NULL AS datetime2) AS [C9],
CAST(NULL AS uniqueidentifier) AS [C10],
CAST(NULL AS bit) AS [C11]
FROM [dbo].[AccountMembers] AS [Extent2]
INNER JOIN [dbo].[People] AS [Extent3] ON [Extent2].[fk_PersonID] = [Extent3].[pk_PersonID]
LEFT OUTER JOIN [dbo].[PersonPhones] AS [Extent4] ON [Extent4].[fk_PersonID] = [Extent2].[fk_PersonID]
WHERE [Limit1].[pk_AccountID] = [Extent2].[fk_AccountID]
UNION ALL
SELECT
2 AS [C1],
2 AS [C2],
[Extent5].[pk_AccountMemberID] AS [pk_AccountMemberID],
[Extent5].[fk_PersonID] AS [fk_PersonID],
[Extent5].[fk_AccountID] AS [fk_AccountID],
[Extent5].[CreatedDate] AS [CreatedDate],
[Extent5].[LastModifiedDate] AS [LastModifiedDate],
[Extent5].[fk_FacilityID] AS [fk_FacilityID],
[Extent5].[Relationship] AS [Relationship],
[Extent5].[IsPrimary] AS [IsPrimary],
2 AS [C3],
[Extent6].[pk_PersonID] AS [pk_PersonID],
[Extent6].[FirstName] AS [FirstName],
[Extent6].[LastName] AS [LastName],
[Extent6].[fk_AddressID] AS [fk_AddressID],
[Extent6].[fk_FacilityID] AS [fk_FacilityID1],
[Extent6].[CreatedDate] AS [CreatedDate1],
[Extent6].[LastModifiedDate] AS [LastModifiedDate1],
[Extent6].[CreatedOnline] AS [CreatedOnline],
[Extent6].[IsDeleted] AS [IsDeleted],
CAST(NULL AS uniqueidentifier) AS [C4],
CAST(NULL AS uniqueidentifier) AS [C5],
CAST(NULL AS uniqueidentifier) AS [C6],
CAST(NULL AS bit) AS [C7],
CAST(NULL AS datetime2) AS [C8],
CAST(NULL AS datetime2) AS [C9],
CAST(NULL AS uniqueidentifier) AS [C10],
CAST(NULL AS uniqueidentifier) AS [C11],
CAST(NULL AS bit) AS [C12],
[Extent7].[pk_PersonEmailAddressID] AS [pk_PersonEmailAddressID],
[Extent7].[fk_PersonID] AS [fk_PersonID1],
[Extent7].[fk_EmailAddressID] AS [fk_EmailAddressID],
[Extent7].[IsDeleted] AS [IsDeleted1],
[Extent7].[CreatedDate] AS [CreatedDate2],
[Extent7].[LastModifiedDate] AS [LastModifiedDate2],
[Extent7].[fk_FacilityID] AS [fk_FacilityID2],
[Extent7].[IsPrimary] AS [IsPrimary1]
FROM [dbo].[AccountMembers] AS [Extent5]
INNER JOIN [dbo].[People] AS [Extent6] ON [Extent5].[fk_PersonID] = [Extent6].[pk_PersonID]
INNER JOIN [dbo].[PersonEmailAddresses] AS [Extent7] ON ([Extent5].[fk_PersonID] = [Extent6].[pk_PersonID]) AND ([Extent7].[fk_PersonID] = [Extent6].[pk_PersonID])
WHERE [Limit1].[pk_AccountID] = [Extent5].[fk_AccountID]) AS [UnionAll1]
) AS [Project4]
ORDER BY [Project4].[pk_AccountID] ASC, [Project4].[C38] ASC, [Project4].[C3] ASC, [Project4].[C12] ASC, [Project4].[C1] ASC
Почему он переключается на эту структуру запроса, когда кажется, что он может продолжать использовать объединения, как написано здесь:
SELECT *
FROM Accounts a
LEFT JOIN (AccountMembers am
INNER JOIN (People p
LEFT JOIN PersonPhones pp ON p.pk_PersonID = pp.fk_PersonID
LEFT JOIN PersonEmailAddresses pe ON p.pk_personID = pe.fk_PersonID
) ON am.fk_PersonID = p.pk_PersonID
) ON am.fk_AccountID = a.pk_AccountID
WHERE a.pk_AccountID = @accountID
Кажется, у этого более простой план выполнения, потому что он LEFT JOINS
PersonPhones
и PersonEmailAddresses
в одном и том же People
"экземпляре", а не объединять их в два отдельных unioned
запроса. SELECT TOP (1)
из Accounts
также кажется ненужным, когда он выбирает указанный первичный ключ c.
Можно ли написать запрос LINQ для использования таких объединений или я пропускаю необходимость? для более сложной версии он генерирует? Это база данных SQL Server 2016.
PS Вот что она генерирует, если я опускаю включение PersonEmailAddresses:
SELECT
[Project2].[OnlineID] AS [OnlineID],
[Project2].[pk_AccountID] AS [pk_AccountID],
[Project2].[IsWaiverOnFile] AS [IsWaiverOnFile],
[Project2].[EmergencyDirectives] AS [EmergencyDirectives],
[Project2].[FirstMembershipDate] AS [FirstMembershipDate],
[Project2].[fk_FacilityID] AS [fk_FacilityID],
[Project2].[IsDeleted] AS [IsDeleted],
[Project2].[CreatedDate] AS [CreatedDate],
[Project2].[LastModifiedDate] AS [LastModifiedDate],
[Project2].[DoNotMail] AS [DoNotMail],
[Project2].[fk_ReferringAccountID] AS [fk_ReferringAccountID],
[Project2].[DoNotEmail] AS [DoNotEmail],
[Project2].[CreatedOnline] AS [CreatedOnline],
[Project2].[fk_OriginalInquiryID] AS [fk_OriginalInquiryID],
[Project2].[IsMediaReleaseOnFile] AS [IsMediaReleaseOnFile],
[Project2].[Comments] AS [Comments],
[Project2].[C3] AS [C1],
[Project2].[C1] AS [C2],
[Project2].[pk_AccountMemberID] AS [pk_AccountMemberID],
[Project2].[fk_PersonID] AS [fk_PersonID],
[Project2].[fk_AccountID] AS [fk_AccountID],
[Project2].[CreatedDate1] AS [CreatedDate1],
[Project2].[LastModifiedDate1] AS [LastModifiedDate1],
[Project2].[fk_FacilityID1] AS [fk_FacilityID1],
[Project2].[Relationship] AS [Relationship],
[Project2].[IsPrimary] AS [IsPrimary],
[Project2].[pk_PersonID] AS [pk_PersonID],
[Project2].[FirstName] AS [FirstName],
[Project2].[LastName] AS [LastName],
[Project2].[fk_AddressID] AS [fk_AddressID],
[Project2].[fk_FacilityID2] AS [fk_FacilityID2],
[Project2].[CreatedDate2] AS [CreatedDate2],
[Project2].[LastModifiedDate2] AS [LastModifiedDate2],
[Project2].[CreatedOnline1] AS [CreatedOnline1],
[Project2].[IsDeleted1] AS [IsDeleted1],
[Project2].[C2] AS [C3],
[Project2].[pk_PersonPhoneID] AS [pk_PersonPhoneID],
[Project2].[fk_PhoneNumberID] AS [fk_PhoneNumberID],
[Project2].[fk_PhoneTypeID] AS [fk_PhoneTypeID],
[Project2].[IsDeleted2] AS [IsDeleted2],
[Project2].[CreatedDate3] AS [CreatedDate3],
[Project2].[LastModifiedDate3] AS [LastModifiedDate3],
[Project2].[fk_FacilityID3] AS [fk_FacilityID3],
[Project2].[fk_PersonID1] AS [fk_PersonID1],
[Project2].[IsPrimary1] AS [IsPrimary1]
FROM ( SELECT
[Limit1].[pk_AccountID] AS [pk_AccountID],
[Limit1].[OnlineID] AS [OnlineID],
[Limit1].[fk_FacilityID] AS [fk_FacilityID],
[Limit1].[fk_OriginalInquiryID] AS [fk_OriginalInquiryID],
[Limit1].[fk_ReferringAccountID] AS [fk_ReferringAccountID],
[Limit1].[FirstMembershipDate] AS [FirstMembershipDate],
[Limit1].[EmergencyDirectives] AS [EmergencyDirectives],
[Limit1].[IsWaiverOnFile] AS [IsWaiverOnFile],
[Limit1].[IsMediaReleaseOnFile] AS [IsMediaReleaseOnFile],
[Limit1].[DoNotMail] AS [DoNotMail],
[Limit1].[DoNotEmail] AS [DoNotEmail],
[Limit1].[CreatedDate] AS [CreatedDate],
[Limit1].[LastModifiedDate] AS [LastModifiedDate],
[Limit1].[CreatedOnline] AS [CreatedOnline],
[Limit1].[IsDeleted] AS [IsDeleted],
[Limit1].[Comments] AS [Comments],
[Join2].[pk_AccountMemberID] AS [pk_AccountMemberID],
[Join2].[fk_PersonID1] AS [fk_PersonID],
[Join2].[fk_AccountID] AS [fk_AccountID],
[Join2].[CreatedDate1] AS [CreatedDate1],
[Join2].[LastModifiedDate1] AS [LastModifiedDate1],
[Join2].[fk_FacilityID1] AS [fk_FacilityID1],
[Join2].[Relationship] AS [Relationship],
[Join2].[IsPrimary1] AS [IsPrimary],
[Join2].[pk_PersonID] AS [pk_PersonID],
[Join2].[FirstName] AS [FirstName],
[Join2].[LastName] AS [LastName],
[Join2].[fk_AddressID] AS [fk_AddressID],
[Join2].[fk_FacilityID2] AS [fk_FacilityID2],
[Join2].[CreatedDate2] AS [CreatedDate2],
[Join2].[LastModifiedDate2] AS [LastModifiedDate2],
[Join2].[CreatedOnline] AS [CreatedOnline1],
[Join2].[IsDeleted1] AS [IsDeleted1],
CASE WHEN ([Join2].[pk_AccountMemberID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1],
[Join2].[pk_PersonPhoneID] AS [pk_PersonPhoneID],
[Join2].[fk_PersonID2] AS [fk_PersonID1],
[Join2].[fk_PhoneNumberID] AS [fk_PhoneNumberID],
[Join2].[fk_PhoneTypeID] AS [fk_PhoneTypeID],
[Join2].[IsDeleted2] AS [IsDeleted2],
[Join2].[CreatedDate3] AS [CreatedDate3],
[Join2].[LastModifiedDate3] AS [LastModifiedDate3],
[Join2].[fk_FacilityID3] AS [fk_FacilityID3],
[Join2].[IsPrimary2] AS [IsPrimary1],
CASE WHEN ([Join2].[pk_AccountMemberID] IS NULL) THEN CAST(NULL AS int) WHEN ([Join2].[pk_PersonPhoneID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C2],
CASE WHEN ([Join2].[pk_AccountMemberID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C3]
FROM (SELECT TOP (1)
[Extent1].[pk_AccountID] AS [pk_AccountID],
[Extent1].[OnlineID] AS [OnlineID],
[Extent1].[fk_FacilityID] AS [fk_FacilityID],
[Extent1].[fk_OriginalInquiryID] AS [fk_OriginalInquiryID],
[Extent1].[fk_ReferringAccountID] AS [fk_ReferringAccountID],
[Extent1].[FirstMembershipDate] AS [FirstMembershipDate],
[Extent1].[EmergencyDirectives] AS [EmergencyDirectives],
[Extent1].[IsWaiverOnFile] AS [IsWaiverOnFile],
[Extent1].[IsMediaReleaseOnFile] AS [IsMediaReleaseOnFile],
[Extent1].[DoNotMail] AS [DoNotMail],
[Extent1].[DoNotEmail] AS [DoNotEmail],
[Extent1].[CreatedDate] AS [CreatedDate],
[Extent1].[LastModifiedDate] AS [LastModifiedDate],
[Extent1].[CreatedOnline] AS [CreatedOnline],
[Extent1].[IsDeleted] AS [IsDeleted],
[Extent1].[Comments] AS [Comments]
FROM [dbo].[Accounts] AS [Extent1]
WHERE [Extent1].[pk_AccountID] = @p__linq__0 ) AS [Limit1]
LEFT OUTER JOIN (SELECT [Extent2].[pk_AccountMemberID] AS [pk_AccountMemberID], [Extent2].[fk_PersonID] AS [fk_PersonID1], [Extent2].[fk_AccountID] AS [fk_AccountID], [Extent2].[CreatedDate] AS [CreatedDate1], [Extent2].[LastModifiedDate] AS [LastModifiedDate1], [Extent2].[fk_FacilityID] AS [fk_FacilityID1], [Extent2].[Relationship] AS [Relationship], [Extent2].[IsPrimary] AS [IsPrimary1], [Extent3].[pk_PersonID] AS [pk_PersonID], [Extent3].[FirstName] AS [FirstName], [Extent3].[LastName] AS [LastName], [Extent3].[fk_AddressID] AS [fk_AddressID], [Extent3].[fk_FacilityID] AS [fk_FacilityID2], [Extent3].[CreatedDate] AS [CreatedDate2], [Extent3].[LastModifiedDate] AS [LastModifiedDate2], [Extent3].[CreatedOnline] AS [CreatedOnline], [Extent3].[IsDeleted] AS [IsDeleted1], [Extent4].[pk_PersonPhoneID] AS [pk_PersonPhoneID], [Extent4].[fk_PersonID] AS [fk_PersonID2], [Extent4].[fk_PhoneNumberID] AS [fk_PhoneNumberID], [Extent4].[fk_PhoneTypeID] AS [fk_PhoneTypeID], [Extent4].[IsDeleted] AS [IsDeleted2], [Extent4].[CreatedDate] AS [CreatedDate3], [Extent4].[LastModifiedDate] AS [LastModifiedDate3], [Extent4].[fk_FacilityID] AS [fk_FacilityID3], [Extent4].[IsPrimary] AS [IsPrimary2]
FROM [dbo].[AccountMembers] AS [Extent2]
INNER JOIN [dbo].[People] AS [Extent3] ON [Extent2].[fk_PersonID] = [Extent3].[pk_PersonID]
LEFT OUTER JOIN [dbo].[PersonPhones] AS [Extent4] ON [Extent4].[fk_PersonID] = [Extent2].[fk_PersonID] ) AS [Join2] ON [Limit1].[pk_AccountID] = [Join2].[fk_AccountID]
) AS [Project2]
ORDER BY [Project2].[pk_AccountID] ASC, [Project2].[C3] ASC, [Project2].[pk_AccountMemberID] ASC, [Project2].[pk_PersonID] ASC, [Project2].[C2] ASCa