2010-07-22 1 views
0
내가 .NET 4 VS 2010 및 .NET 3.5에서 같은 문제가 사용하고

/VS 2008

구조를 조인 AddressChangeRequest
표 3 : CallNotes

단일 통화가 많은 AddressChangeRequests 많은 CallNotes을 가질 수
표 2 호출합니다. 고객 (customerKey)은 많은 통화를 가질 수 있습니다.

LINQ 코드 :.
반환 db.Calls.Where (C => c.CustomerKey == '...')를 선택 ( C => 새로운 호출 (c.CustomerKey, c.StartTime, C .AddressChangeRequests, c.CallNotes));

호출은 AddressChangeRequests 및 CallNotes 목록을 필요로하는 도메인 개체입니다. 코드는 예상대로 호출 목록을 반환하지만 SQL은 최적이 아닙니다.

위의 코드는 1로 SQL은 (각각 관련된 호출에 대해 하나)을 CallNote 테이블로부터 분리 SELECT 쿼리 뒤에 AddressChangeRequest 테이블

Select ... from Call as c 
LEFT OUTER JOIN AddressChangeRequest as acr ON c.id = acr.callId 

Select ... from CallNote Where callId = 123 
Select ... from CallNote Where callId = 456 
Select ... from CallNote Where callId = 789 

경우 조인 왼쪽 외부로 호출 테이블에서 선택 생성 코드에서 AddressChangeRequests를 제거하면 CallNote 테이블에 대해 왼쪽 외부 조인이 생성되고 개별 Select 문은 더 이상 생성되지 않습니다.

Select ... from Call as c 
LEFT OUTER JOIN AddressChangeRequest as acr ON c.id = acr.callId 
LEFT OUTER JOIN CallNote as cn ON c.id = cn.callId 
+0

LINQtoSQL을 가정하고 DataLoadOptions.LoadWith를 사용하고 있습니까? – Marc

+0

네, LINQtoSQL에 맞습니다. 예, CallNote 및 AddressChangeRequest에서 DataLoadOptions.LoadWith를 시도했으나, 활성화 또는 비활성화가 차이를 만들지 않습니다. 의견을 보내 주셔서 감사합니다. 다른 아이디어는 있습니까? – kforbesie

답변

0

대답은 "아니오"불행히도 :

내 질문은 다음과 내가 하나의 SQL 문을 생성 할 수있는 방법 LINQ를 사용하는 것입니다. 열망하는 L2S 지원은 원시적입니다. 그러나 표준 조회 기능 위에 고유 한 버전을 작성할 수 있습니다.