2011-04-25 4 views
6

linq to sql 쿼리에 주 엔터티가있는 하위 엔터티를 포함 할 수 있기를 원합니다. 내 ASPX 페이지에서linq to sql에서 초기 쿼리와 함께 하위 엔티티를 어떻게 포함합니까?

Public Function GetEmployees() As IEnumerable(Of Employee) 
    Dim dc As New MyDataContext() 
    Return From e In dc.Employee 
End Function 

, 나는 그것을 돌아가서 데이터베이스에게이 각각 모든 직원의 부서 기업에서 부서 이름을 필요가있을 때마다 쿼리 할 필요없이 각 직원의 부서를 표시합니다. 나는 부서를 포함하도록 변경하면

<asp:repeater...> 
    ... 
     <%# Eval("FirstName") %><br /> 
     <%# Eval("LastName") %><br /> 
     <%# Eval("Department.Name") %> <--- re-queries db every time on this line? 
    ... 
</asp:repeater> 

, 나는 오류가 발생 :

Public Function GetEmployees() As IEnumerable(Of Employee) 
    Dim dc As New MyDataContext() 
    Return From e In dc.Employee Select e, e.department 
End Function 


Unable to cast object of type 'System.Data.Linq.DataQuery`1[VB$AnonymousType_0`2[MyNameSpace.Employee,System.Data.Linq.EntitySet`1[MyNameSpace.Employee.Department]]]' to type 'System.Collections.Generic.IEnumerable`1[MyNameSpace.Employee]'. 

답변

14

LINQ 당신이 DataloadOptions (C#의 코드 예제)을 변경할 수 있습니다 SQL의 경우 :

var dlo = new DataLoadOptions(); 
dlo.LoadWith<Employee>(p => p.department); 
dc.LoadOptions = dlo; 

(Include()은 Linq to Entities에서만 지원됩니다)

+0

우수 - 감사합니다! 따라서 매번 특정 쿼리에 추가 할 필요가 없습니다. 나는 datacontext에서 Employee를 질의 할 때 항상 관련된 Department 데이터를 포함해야한다고 명시한다. – EdenMachine

+0

@EdenMachine - 네, 데이터 컨텍스트 범위에 있습니다 – BrokenGlass

+0

대단히 감사합니다! – EdenMachine

관련 문제