누군가 linq가 엔티티에 항상 왼쪽 외부 조인을 생성하는 것처럼 보이는 이유를 아는 사람이 있는지 궁금합니다. 나는 선택적인 관계에서 그것을 이해할 것이지만 관계가 필수 일 때 그것은 좋은 말이되지 않습니다.왜 Linq to Entities는 외부 외부 조인을 생성합니까?
내부 조인을 생성하는 방법을 알고있는 사람이 있습니까? 당신은 내부 만들 수 있습니다
누군가 linq가 엔티티에 항상 왼쪽 외부 조인을 생성하는 것처럼 보이는 이유를 아는 사람이 있는지 궁금합니다. 나는 선택적인 관계에서 그것을 이해할 것이지만 관계가 필수 일 때 그것은 좋은 말이되지 않습니다.왜 Linq to Entities는 외부 외부 조인을 생성합니까?
내부 조인을 생성하는 방법을 알고있는 사람이 있습니까? 당신은 내부 만들 수 있습니다
조인. join
키워드 만 사용하면됩니다.
var query = from od in db.SalesOrderHeader
join c in db.Customer on od.Customer.CustomerID equals c.CustomerID
select new { c.AccountNumber, od.OrderDate };
동등한 SQL :
SELECT
1 AS [C1],
[Extent2].[AccountNumber] AS [AccountNumber],
[Extent1].[SalesOrderID] AS [SalesOrderID],
[Extent1].[RevisionNumber] AS [RevisionNumber],
[Extent1].[OrderDate] AS [OrderDate],
[Extent1].[DueDate] AS [DueDate],
[Extent1].[ShipDate] AS [ShipDate],
[Extent1].[Status] AS [Status],
[Extent1].[OnlineOrderFlag] AS [OnlineOrderFlag],
[Extent1].[SalesOrderNumber] AS [SalesOrderNumber],
[Extent1].[PurchaseOrderNumber] AS [PurchaseOrderNumber],
[Extent1].[AccountNumber] AS [AccountNumber1],
[Extent1].[CreditCardApprovalCode] AS [CreditCardApprovalCode],
[Extent1].[SubTotal] AS [SubTotal],
[Extent1].[TaxAmt] AS [TaxAmt],
[Extent1].[Freight] AS [Freight],
[Extent1].[TotalDue] AS [TotalDue],
[Extent1].[Comment] AS [Comment],
[Extent1].[rowguid] AS [rowguid],
[Extent1].[ModifiedDate] AS [ModifiedDate],
[Extent1].[BillToAddressID] AS [BillToAddressID],
[Extent1].[ContactID] AS [ContactID],
[Extent1].[ShipMethodID] AS [ShipMethodID],
[Extent1].[CreditCardID] AS [CreditCardID],
[Extent1].[CurrencyRateID] AS [CurrencyRateID],
[Extent1].[CustomerID] AS [CustomerID],
[Extent1].[SalesPersonID] AS [SalesPersonID],
[Extent1].[TerritoryID] AS [TerritoryID]
FROM [Sales].[SalesOrderHeader] AS [Extent1]
INNER JOIN [Sales].[Customer] AS [Extent2] ON ([Extent1].[CustomerID] = [Extent2].[CustomerID]) OR (([Extent1].[CustomerID] IS NULL) AND ([Extent2].[CustomerID] IS NULL))
EF는 'join'과 [일반적으로 L2E에서 join을 사용하는 것이 잘못되었습니다] (http://blogs.teamb.com/craigstuntz/2010/01/13/38525/)를 사용하지 않고 INNER JOIN을 쉽게 사용할 수 있습니다. –
@Craig Stuntz - 당신의 논문은 왜 L2S 나 L2E에서 구문 결합 선호를 뛰어 넘어서'join '을 사용해서는 안되는 지에 대한 매력적인 논쟁을 제공하지 않습니다. 중요한 성능 차이가 있습니까? 'join' 구문으로 작성할 수없는 일련의 쿼리가 있습니까? 하나가 좀 더 장황 할 수있는 유일한 이유는 무엇입니까? – Thomas
나는 이것에 관해 꽤 분명하다고 생각했다.'join '을 사용하는 것은 그것을 사용하지 않는 것과 똑같은 일을한다. 단 두번의 타이핑과 가독성과 유지 보수성의 절반을 제외한다. 항해가 사용될 수있는 경우에는 이점이 없습니다. –
거짓 전제 : 여기
그리고
는 LINQ 쿼리가 생성되는 SQL 예를 들어, 여기에 AdventureWorks 데이터베이스에 대한 쿼리입니다. L2E *는 종종 LEFT가 필요한 무언가를하지 않을 때 INNER JOIN을 사용합니다. 특정 검색어 예제는 귀하가보고있는 것을 설명하는 데 도움이됩니다. –