subselect가있는 조회가 있으며, subselect에 추가 된 각 추가 필드는 동일한 테이블에 대한 추가 조인을 초래합니다. 나는 여기에 Where()
절을 제거하여 게시하는데 약간 줄 였지만 그 결과는 같습니다.Subselect는 선택된 각 필드에 대해 조인을 발생시킵니다.
DbContext.Customer
.Select(item => new
{
ID = item.Id,
Name = item.NameCompany,
BaseAddress = item.Customer_Address
.Select(child => new
{
Street = child.Address.Street,
Number = child.Address.Number,
PostalCode = child.Address.PostalCode,
City = child.Address.City
})
.FirstOrDefault()
})
.Select(item => new
{
item.ID,
item.Name,
item.BaseAddress.Street,
item.BaseAddress.Number,
item.BaseAddress.PostalCode,
item.BaseAddress.City
})
.First();
SELECT TOP (1)
[Extent1].[Id] AS [Id],
[Extent1].[NameCompany] AS [NameCompany],
[Element1].[Street] AS [Street],
[Element1].[Number] AS [Number],
[Element1].[PostalCode] AS [PostalCode],
[Element1].[City] AS [City]
FROM [dbo].[Customer] AS [Extent1]
OUTER APPLY (SELECT TOP (1)
[Limit1].[AddressId] AS [AddressId],
[Extent3].[Id] AS [Id],
[Extent3].[Street] AS [Street],
[Extent4].[Id] AS [Id1],
[Extent4].[Number] AS [Number],
[Extent5].[Id] AS [Id2],
[Extent5].[PostalCode] AS [PostalCode],
[Extent6].[Id] AS [Id3],
[Extent6].[City] AS [City]
FROM (SELECT TOP (1)
[Extent2].[AddressId] AS [AddressId]
FROM [dbo].[Customer_Address] AS [Extent2]
WHERE [Extent1].[Id] = [Extent2].[CustomerId]) AS [Limit1]
LEFT OUTER JOIN [dbo].[Address] AS [Extent3] ON [Limit1].[AddressId] = [Extent3].[Id]
LEFT OUTER JOIN [dbo].[Address] AS [Extent4] ON [Limit1].[AddressId] = [Extent4].[Id]
LEFT OUTER JOIN [dbo].[Address] AS [Extent5] ON [Limit1].[AddressId] = [Extent5].[Id]
LEFT OUTER JOIN [dbo].[Address] AS [Extent6] ON [Limit1].[AddressId] = [Extent6].[Id]) AS [Element1]
나는 그것을 한 번에 가입하기 위해 내 쿼리를 변경할 수 있습니까? 아니면 아마도 EF의 버그일까요?
EF는 그러한 돼지입니다. 명시 적 조인을 공식화하십시오. – usr
@usr 이는 탐색 속성을 사용하지 않고 (필자의 경우) 유창한 구문을 사용하지 않는다는 것을 의미합니다. 내가'Join()'을 시도한 시간은 항상 끔찍한 것으로 끝납니다. 우아한 'Join()'을 작성하는 것이 가능한지 확실하지 않습니다. – Stijn
쿼리 식을 사용하는 것이 좋습니다. 그것은 많은 고통을 사라지게합니다. – usr